工作时间比对函数

函数要求说明书:

函数名称:IsSameDay

参数: @date1 DATETIME
          @date2 DATETIME

返回值:如果@date1 和 @date2 处在同一工作时间段则返回 1, 否则返回0

说明:

 这个函数判断@date1 所指示的日期和@date2 所指示的日期是否在一同一工作时间段,如果是则返回1,其他情况返回0。这里的工作时间段是从每天的凌晨6点到次日凌晨6点。举例来说:
 
 '2006-4-23 8:00:00' 和 '2006-4-24 23:59:59' 是同一时间段,
 '2006-4-23 6:00:00' 和 '2006-4-24 2:00:00' 是同一时间段,
 '2006-4-23 6:00:00' 和 '2006-4-24 5:59:59' 是同一时间段,
 '2006-4-24 5:59:59' 和 '2006-4-24 6:00:00' 不是同一时间段!!

特殊要求:
 要求算法尽可能的简单高效。

-------------------------------------------------
-- alter function IsSameDay(@date1 datetime,@date2 datetime)
-- returns bit
-- as
-- begin
--  declare @Flag bit
--  if datediff(dd,dateadd(hh,-6,@date1),dateadd(hh,-6,@date2)) = 0
--   begin
--    set @Flag = 1
--   end
--  else
--   begin
--    if datediff(hh,dateadd(hh,-6,@date1),dateadd(hh,-6,@date2)) = 24 --排除正好一天的错误计算
--     begin
--      set @Flag = 1
--     end
--    else
--     begin
--      set @Flag = 0
--     end
--   end
-- return(@Flag)
-- end
-- go

print dbo.IsSameDay('2006-4-23 8:00:00','2006-4-24 23:59:59')
print dbo.IsSameDay('2006-4-23 6:00:00','2006-4-24 2:00:00')
print dbo.IsSameDay('2006-4-23 6:00:00','2006-4-24 5:59:59')
print dbo.IsSameDay('2006-4-24 5:59:59','2006-4-24 6:00:00')
print dbo.IsSameDay('2006-4-23 6:00:00', '2006-4-24 5:59:59') -- 1
print dbo.IsSameDay('2006-4-23 6:00:00', '2006-4-24 6:00:00') -- 0
print dbo.IsSameDay('2006-4-23 6:00:00', '2006-4-23 3:21:00') -- 0
print dbo.IsSameDay('2006-4-22 18:00:00', '2006-4-23 3:21:00') -- 1
print dbo.IsSameDay('2006-4-23 2:00:00', '2006-4-23 6:21:00') -- 0
print dbo.IsSameDay('2006-4-23 2:00:00', '2006-4-23 6:21:00') --

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值