函数要求说明书:
函数名称: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') --