Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对SQL server的昼夜间隔进行分类_Sql_Sql Server - Fatal编程技术网

对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_ID=@from_TIME\u Day 和castData.IO_TIME as TIME=@From_TIME_Night 和castData.IO_TIME as TIME<@午夜 然后“晚上” 什么时候 Cast从IO_信息中选择前1个IO_时间,其中IO_状态='IN'和CA_ID=Data.CA_ID和IO_ID=@午夜 和castData.IO_TIME as TIME=@From_TIME_Night and Cast从IO_信息中选择前1个IO_时间,其中IO_状态='IN'和CA_ID=Data.CA_ID和IO_IDcastData.IO_TIME as TIME>=@Midnight和castData.IO_TIME as TIME好的,鉴于这是一种棘手的查询类型,我已经浪费了一些时间来寻找解决方案,我在测试数据库中创建了一个表,包含4个字段,ID、Car、TimeOut、TimeIn,我在这个表中插入了一些行以获得样本,然后我进行了一个查询,返回我的汽车每次行驶的时段状态

以下是查询:

SELECT [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来决定时段是白天还是黑夜。 嗯