广

MSSQL

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    MSSQL 计算两个日期相差的工作天数的语句

    2018-05-08 11:29:08 次阅读 稿源:互联网
    零七网广告
    全网推广平台,软文发布
    代码如下:

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDay]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_WorkDay]
    GO
    --计算两个日期相差的工作天数
    CREATE FUNCTION f_WorkDay(
    @dt_begin datetime, --计算的开始日期
    @dt_end datetime --计算的结束日期
    )RETURNS int
    AS
    BEGIN
    declare @i int
    select @i=abs(datediff(dd,@dt_begin,@dt_end))
    declare @t table(dt datetime)
    if @dt_begin>@dt_end
    insert @t select dateadd(dd,number,@dt_end) from master..spt_values
    where number<=@i and type='P'
    else
    insert @t select dateadd(dd,number,@dt_begin) from master..spt_values
    where number<=@i and type='P'
    return(select count(*) from @t where (datepart(weekday,dt)+@@datefirst-1)%7 between 1 and 5)
    END
    GO
    select dbo.f_WorkDay('2009-10-10','2009-10-1')
    /*
    -----------
    7
    (1 料列受到影)
    */
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDay]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_WorkDay]
    GO
    --计算两个日期相差的工作天数
    CREATE FUNCTION f_WorkDay(
    @dt_begin datetime, --计算的开始日期
    @dt_end datetime --计算的结束日期
    )RETURNS int
    AS
    BEGIN
    DECLARE @workday int,@i int,@bz bit,@dt datetime
    set @workday=0
    IF @dt_begin>@dt_end
    SELECT @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
    ELSE
    SET @bz=0
    WHILE @dt_begin<=@dt_end
    BEGIN
    SELECT @workday=CASE
    WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
    THEN @workday+1 ELSE @workday END,
    @dt_begin=@dt_begin+1
    END
    RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END)
    END
    GO
    select dbo.f_WorkDay('2009-10-10','2009-10-1')
    /*
    -----------
    -7
    */

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七网广告
    零七网广告
    零七网广告
    零七网广告