对SQL server的昼夜间隔进行分类
我有一个时间框架:对SQL server的昼夜间隔进行分类,sql,sql-server,Sql,Sql Server,我有一个时间框架: FROMTIME:06:01:00 - TOTIME:23:59:00 = DAY FROMTIME:23:59:01 - TOTIME:06:00:00 = Night 我在车上有一段时间进出。 如何根据汽车将间隔时间划分为白天、黑夜或白天和黑夜 . 我使用代码,但执行时间很长: 声明@From_Time_Day Time ,@To_Time_Day Time ,@From_Time_Night Time ,@至_时间_夜间时间 午夜时间 设置@From_Tim
FROMTIME:06:01:00 - TOTIME:23:59:00 = DAY
FROMTIME:23:59:01 - TOTIME:06:00:00 = Night
我在车上有一段时间进出。
如何根据汽车将间隔时间划分为白天、黑夜或白天和黑夜
. 我使用代码,但执行时间很长:
声明@From_Time_Day Time
,@To_Time_Day Time
,@From_Time_Night Time
,@至_时间_夜间时间
午夜时间
设置@From_Time_Day=选择From_Time From Day_状态,其中Day_CHECK=1
设置@To_Time_Day=选择To_Time from Day_状态,其中Day_CHECK=1
设置@From_Time_Night=选择From_Time From DAY_状态,其中DAY_CHECK=2
设置@To_Time_Night=选择To_Time from DAY_状态,其中DAY_CHECK=2
设置为午夜='00:00:00'
从中选择*
选择
当
Cast从IO_信息中选择前1个IO_时间,其中IO_状态='IN'和CA_ID=Data.CA_ID和IO_IDSELECT [ID]
,[Car]
,[TimeOut]
,[TimeIn]
, MultiDay
,OutDAyNight
,InDAyNight
, CASE WHEN Multiday = 1 THEN 'Day/Night'
WHEN OutDAyNight+InDAyNight = 1 THEN 'Day/Night'
WHEN OutDAyNight+InDAyNight = 2 THEN 'Day'
WHEN OutDAyNight+InDAyNight = 0 THEN 'Night' END AS Periods
FROM
(SELECT [ID]
,[Car]
,[TimeOut]
,[TimeIn]
, CASE WHEN DATEDIFF(hour, [TimeOut],[TimeIn]) > 18
THEN 1 ELSE 0 END AS MultiDay
, CASE WHEN DATEPART(hour, [TimeOut]) > 6 AND
DATEPART(hour, [TimeOut]) <=23 THEN 1
WHEN DATEPART(hour, [TimeOut]) = 6 AND
DATEPART(minute, [TimeOut]) > 0 THEN 1
ELSE 0 END AS OutDAyNight
, CASE WHEN DATEPART(hour, [TimeIn]) > 6 AND
DATEPART(hour, [TimeIn]) <=23 THEN 1
WHEN DATEPART(hour, [TimeIn]) = 6 AND
DATEPART(minute, [TimeIn]) > 0 THEN 1
ELSE 0 END AS InDAyNight
FROM [dbo].[TbCarInOut] ) Times
使用这个双重查询,在第一个选择脚本中较低的一个时,我使用Datediff函数来查看车辆离开和返回之间的时间是否超过18个小时,这肯定意味着有一个白天和晚上的时间段。然后,我使用Datepart函数来理解out time是夜间还是日间,将0设置为夜间,1设置为日间,我对time也这样做,这样,在第二次查询中,我可以使用一个简单的case和一个sum来决定时段是白天还是黑夜。
嗯