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

  • 相关阅读:
    Cesium入门-2-增加地形
    Cesium中常用的一些地理数据文件 以及数据相关的东西
    飞行姿态角度表示: heading pitch roll
    Cesium入门-3-官方完整实例
    Cesium中级教程6
    Postgresql添加/删除触发器示例
    VUE课程---6、v-text和v-html指令
    VUE课程---5、vue devtools
    VUE课程---4、MVVM原理
    js简单对象(plain javascript object)
  • 原文地址:https://www.cnblogs.com/yachao1120/p/8526029.html
Copyright © 2011-2022 走看看