Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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表的时间过滤

Sql server sql表的时间过滤,sql-server,Sql Server,我在表中有以下列 ISOCardNumber Terminalno. Eventdatetime 456 11 10/02/2017 7:12 789 13 10/02/2017 8:12 456 22 11/02/2017 11:13 123 11 10/02/2017 9:59 789

我在表中有以下列

ISOCardNumber    Terminalno.    Eventdatetime
456                 11        10/02/2017 7:12
789                 13        10/02/2017 8:12
456                 22        11/02/2017 11:13
123                 11        10/02/2017 9:59
789                 24        12/02/2017 9:12
123                 22        10/02/17 11:59
isocardnumber
在表中重复两次,并首先与terminalno链接。具有奇数(限制为11,13),然后将其链接到偶数(限制为22,24)。结果需要根据时间进行过滤。 就像我想知道有多少
ISOcardnumber
在哪里输入和输出
10/02/2017 07:12
11/02/2017 11:13

我尝试了下面的查询

SELECT ISOcardNumber, 
       MAX(CASE WHEN TerminalNumber IN (11) THEN TerminalNumber END) AS TerminalNumber_in, 
       MAX(CASE WHEN TerminalNumber IN (11) THEN EventDateTime END) AS Time_in, 
       MAX(CASE WHEN TerminalNumber IN (22, 24) THEN TerminalNumber END) 
                      AS TerminalNumber_out, 
       MAX(CASE WHEN terminalNumber IN (22, 24) THEN Eventdatetime END) AS time_out 
FROM   dbo.vEvents
WHERE  (TerminalNumber IN (11, 22, 24)) AND EventDateTime>='10-2-2017' AND
       EventDateTime <'12-2-2017' 
     AND (CAST(EventDateTime AS TIME) between '07:12' and '23:59')     
GROUP BY ISOcardNumber
ORDER BY Time_in DESC

检查datetime不需要单独的谓词。这应该做到:

EventDateTime介于“2017-02-10 07:12”和“2017-02-11 12:00”之间


将此
(CAST(EventDateTime作为时间)在'07:12'和'23:59'之间转换为
(CAST(EventDateTime作为日期时间)在和之间转换如何?
如果
EventDateTime
是一个
DATETIME
字段,则无需进行任何转换,简单的
EventDateTime在某个日期和另一个日期之间转换即可。如果不是,那就是一个bug。您应该始终使用适当的类型来存储日期。例如,如果以发布的格式存储日期,则不能使用范围搜索。此外,是2002年11月2日还是2月11日?几乎可以肯定的是,如果我每隔一个月搜索一次,但时间限制为上午10点到第二天上午8点,那么在某个时候,有人会使用错误的区域设置来解析该文本。那么,上述情况将无济于事
TicketNumber    Machineno.   TimeIn             Machineno.   Timeout
456                 11       10/02/2017 7:12    22           11/02/2017 11:13
123                 11       10/02/2017 9:59    22           10/02/2017 11:59