计算日期类型-未完待完成

Posted 小猫钓鱼吃鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算日期类型-未完待完成相关的知识,希望对你有一定的参考价值。

/* =======================================
版权:CuiYaChao
创 建 人:CuiYaChao
创建日期:
功能描述:传递6个参数 开始日期 开始小时 开始分钟 结束日期 结束小时 结束分钟,
计算得出该段时间的加班类型以及对应加班类型的小时数加班类型有 工作日 双休日 法定假日
******有可能某一天既是法定假日 又是双休日******
单元名称: Fun_GetJiaBanTypeTatalHour
主表(可更新表):
包含表:
修改日志:
其它说明:

======================================= */
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N‘[dbo].[Fun_GetJiaBanTypeTatalHour]‘))
DROP FUNCTION Fun_GetJiaBanTypeTatalHour
GO

CREATE FUNCTION Fun_GetJiaBanTypeTatalHour(
@startdate NVARCHAR(50)--开始日期
,@starthour INT --开始小时
,@startmin INT --开始分钟
,@enddate NVARCHAR(50)--结束日期
,@endhour INT --结束小时
,@endmin INT --结束分钟
)
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @sresult NVARCHAR(50) ,@isWeekResult INT ,
@jiabantype NVARCHAR(20), @jiabantype_week NVARCHAR(20), @jiabantype_holiday NVARCHAR(20),
@totalhour FLOAT ,@totalhour_week FLOAT ,@totalhour_holiday FLOAT,
@startdate_comebine NVARCHAR(50),@enddate_comebine NVARCHAR(50),@enddate_zero NVARCHAR(50)

SET @[email protected]+‘ ‘[email protected]+‘:‘[email protected]
SET @[email protected]+‘ ‘+‘00:00:00‘
SET @[email protected]+‘ ‘[email protected]+‘:‘[email protected]

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

RETURN @sresult
END

 

以上是关于计算日期类型-未完待完成的主要内容,如果未能解决你的问题,请参考以下文章

CentOS6最小化安装所需的常用软件(未完待更新)

Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)

[moka学习笔记]yii2.0数据库查询的多种方法(未完待整理)

字符串匹配算法的使用(未完待整理)

在html中计算两个输入类型=“日期”之间的天数[重复]

计算两个日期之间相差几天(Date类型与String类型互相转换)