zoukankan      html  css  js  c++  java
  • 计算日期类型

    CREATE FUNCTION Fun_GetJiaBanTypeTatalHour(
    @startdate NVARCHAR(50)--开始日期
    ,@starthour INT --开始小时
    ,@startmin INT --开始分钟
    ,@enddate NVARCHAR(50)--结束日期
    ,@endhour INT --结束小时
    ,@endmin INT --结束分钟
    )
    RETURNS @table TABLE(
    jiabantype_day NVARCHAR(30),totalhour_day FLOAT,
    jiabantype_week NVARCHAR(30),totalhour_week FLOAT,
    jiabantype_holiday NVARCHAR(30),totalhour_holiday FLOAT
    )
    AS
    BEGIN

    DECLARE @isWeekResult INT ,
    @jiabantype_day NVARCHAR(20)='', @jiabantype_week NVARCHAR(20)='', @jiabantype_holiday NVARCHAR(20)='',
    @totalhour_day FLOAT=0 ,@totalhour_week FLOAT=0 ,@totalhour_holiday FLOAT=0,
    @startdate_comebine NVARCHAR(50),@enddate_comebine NVARCHAR(50),@enddate_zero NVARCHAR(50)
    ,@start_zero_Hour FLOAT =0 ,@zero_end_Hour FLOAT =0 ,@start_end_Hour FLOAT =0

    SET @startdate_comebine=@startdate+' '+CAST(@starthour AS NVARCHAR(10))+':'+CAST(@startmin AS NVARCHAR(10))
    SET @enddate_zero=@enddate+' '+'00:00:00'
    SET @enddate_comebine=@enddate+' '+CAST(@endhour AS NVARCHAR(10))+':'+CAST(@endmin AS NVARCHAR(10))

    SELECT @start_end_Hour=CAST((SELECT DATEDIFF(MINUTE,@startdate_comebine,@enddate_comebine))*1.0/60 AS NUMERIC(18,2))
    SELECT @start_zero_Hour=CAST((SELECT DATEDIFF(MINUTE,@startdate_comebine,@enddate_zero))*1.0/60 AS NUMERIC(18,2))
    SELECT @zero_end_Hour=CAST((SELECT DATEDIFF(MINUTE,@enddate_zero,@enddate_comebine))*1.0/60 AS NUMERIC(18,2))

    IF @startdate<>@enddate
    BEGIN
    --1 首先判断开始日期 是否是法定假日
    IF EXISTS(SELECT TOP 1 1 FROM dbo.tb_LegalHoliday WHERE holidaydate=@startdate) --开始日期是法定假日
    BEGIN
    SET @jiabantype_holiday='法定假日'
    --继续判断结束日期是否是法定假日
    IF NOT EXISTS(SELECT TOP 1 1 FROM dbo.tb_LegalHoliday WHERE holidaydate=@enddate)--结束日期不是法定假日
    BEGIN
    --继续判断结束日期是否是双休日 DATEPART(dw,'date') in 7,、1
    SELECT @isWeekResult=DATEPART(dw,@enddate)
    IF @isWeekResult IN (7,1)--是双休日
    BEGIN
    SET @jiabantype_week='双休日'
    --然后开始计算开始日期的加班时间 结束日期的加班时间
    SET @totalhour_holiday=@start_zero_Hour
    SET @totalhour_week=@zero_end_Hour
    SET @totalhour_day=0
    END
    --否则的话是工作日
    ELSE
    BEGIN
    SET @jiabantype_day='工作日'
    SET @totalhour_week=0
    SET @totalhour_holiday=@start_zero_Hour
    SET @totalhour_day=@zero_end_Hour
    END
    END
    ELSE
    --结束日期和开始日期相同类型 都是法定假日
    BEGIN
    SET @totalhour_day=0
    SET @totalhour_week=0 SET @totalhour_holiday=@start_end_Hour
    END
    END
    ELSE
    --开始日期不是法定假日 那么开始日期只有两种情况 双休日或者工作日
    BEGIN
    --如果开始日期不是法定假日 则判断是否是双休日
    SELECT @isWeekResult=DATEPART(dw,@startdate)
    IF @isWeekResult IN (7,1)--开始日期是双休日
    BEGIN
    SET @jiabantype_week='双休日'
    --继续判断结束日期是否是双休日
    SELECT @isWeekResult=DATEPART(dw,@enddate)
    IF @isWeekResult NOT IN (7,1) --结束日期不是双休日
    BEGIN
    --先判断结束日期是否是法定假日
    IF EXISTS(SELECT TOP 1 1 FROM dbo.tb_LegalHoliday WHERE holidaydate=@enddate)
    BEGIN
    SET @jiabantype_holiday='法定假日'
    SET @totalhour_day=0
    SET @totalhour_week=@start_zero_Hour
    SET @totalhour_holiday=@zero_end_Hour
    END
    ELSE
    --结束日期不是法定假日 则结束日期是工作日
    BEGIN
    SET @jiabantype_day='工作日'
    SET @totalhour_holiday=0
    SET @totalhour_week=@start_zero_Hour
    SET @totalhour_day=@zero_end_Hour
    END
    END
    ELSE
    --结束日期和开始日期类型相同都是双休日
    BEGIN
    SET @totalhour_day=0
    SET @totalhour_holiday=0
    SET @totalhour_week=@start_end_Hour
    END
    END
    ELSE
    -- 开始日期是工作日
    BEGIN
    --如果开始日期不是法定假日 不是双休日,那么开始日期为工作日
    --继续判断结束日期 是否为法定假日
    SET @jiabantype_day='工作日'
    IF EXISTS(SELECT TOP 1 1 FROM dbo.tb_LegalHoliday WHERE holidaydate=@enddate)
    --结束日期是法定假日
    BEGIN
    SET @jiabantype_holiday='法定假日'
    SET @totalhour_week=0
    SET @totalhour_day=@start_zero_Hour
    SET @jiabantype_holiday=@zero_end_Hour
    END
    ELSE
    --结束日期为双休日或者工作日
    BEGIN
    SELECT @isWeekResult=DATEPART(dw,@enddate)
    IF @isWeekResult IN (7,1)
    --结束日期是双休日
    BEGIN
    SET @jiabantype_week='双休日'
    SET @totalhour_day=@start_zero_Hour
    SET @totalhour_week=@zero_end_Hour
    SET @totalhour_holiday=0
    END
    ELSE
    --结束日期是工作日
    BEGIN
    SET @totalhour_day=@start_end_Hour
    SET @totalhour_holiday=0
    SET @totalhour_week=0
    END
    END
    END
    END
    END
    ELSE
    --同一天的加班时间
    BEGIN
    IF EXISTS(SELECT TOP 1 1 FROM dbo.tb_LegalHoliday WHERE holidaydate=@startdate)--开始日期和加班日期都是法定假日
    BEGIN
    SET @jiabantype_holiday='法定假日'
    SET @totalhour_holiday=@start_end_Hour
    SET @totalhour_day=0
    SET @totalhour_week=0
    END
    ELSE
    BEGIN
    --开始日期和结束日期均是双休日
    SELECT @isWeekResult=DATEPART(dw,@startdate)
    IF @isWeekResult IN (7,1)
    BEGIN
    SET @jiabantype_week='双休日'
    SELECT @totalhour_week=CAST((SELECT DATEDIFF(MINUTE,@startdate_comebine,@enddate_comebine))*1.0/60 AS NUMERIC(18,2))
    SET @totalhour_day=0 SET @totalhour_holiday=0
    END
    ELSE
    BEGIN
    --开始日期结束日期均是工作日
    SET @jiabantype_day='工作日'
    SET @totalhour_holiday=0
    SET @totalhour_week=0
    SET @totalhour_day=@start_end_Hour
    END
    END
    END

    INSERT INTO @table
    ( jiabantype_day ,totalhour_day ,
    jiabantype_week ,totalhour_week ,
    jiabantype_holiday ,
    totalhour_holiday
    )
    VALUES ( @jiabantype_day , -- jiabantype - nvarchar(30)
    @totalhour_day , -- totalhour - float
    @jiabantype_week , -- jiabantype_week - nvarchar(30)
    @totalhour_week , -- totalhour_week - float
    @jiabantype_holiday , -- jiabantype_holiday - nvarchar(30)
    @totalhour_holiday -- totalhour_holiday - float
    )
    RETURN
    END

  • 相关阅读:
    前端的一些工具
    ubuntu安装intelij idea 和pycharm
    广义欧几里得算法,求解形如ax+by=c的整数解
    Kali安装jdk8
    ARP 项添加失败: 拒绝访问
    Python扩展包,解决”unable to find vcvarsall.bat“
    python实现mschap2
    Ubuntu 安装 Corsaro v2.0.0 全过程
    使用GridFS上传下载图片以及其他文件
    Eclipse设置工作空间编码
  • 原文地址:https://www.cnblogs.com/yachao1120/p/8526029.html
Copyright © 2011-2022 走看看