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