如何查看两个日期和时间之间的结果?
我目前的代码:
SELECT *
FROM [DB].[dbo].[TABLE]
WHERE [USER_ID] = '005'
AND [DATE] BETWEEN '03-04-2016' AND '04-04-2016'
AND [TIME] >= '21:00:00' -- for date 03-04-2016
AND [TIME] <= '05:00:00' -- for date 04-04-2016
ORDER BY [DATE] ASC, [TIME] ASC
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,我不知道如何修复它
为什么这个请求不起作用?
任何行都不可能同时满足[TIME] >= '21:00:00'
和 [TIME] <= '05:00:00'
SQL Server 不会读取您的源代码注释来知道应该有条件地应用时间。
您需要更改代码以便在边界日期上有条件地应用这些谓词(假设搜索日期为剩余谓词),因此时间元素仅与这些条件适用的日期相关。
SELECT *
FROM [DB].[dbo].[TABLE]
WHERE [USER_ID] = '005'
AND [DATE] BETWEEN '20160403' AND '20160404'
AND ([TIME] >= '21:00:00' OR [DATE] > '20160403')
AND ([TIME] <= '05:00:00' OR [DATE] < '20160404') ;
Run Code Online (Sandbox Code Playgroud)
或等价物(虽然您需要检查执行计划以提高效率,但可能更多地自我记录):
SELECT *
FROM [DB].[dbo].[TABLE]
WHERE [USER_ID] = '005'
AND ( [DATE] = '20160403' AND [TIME] >= '21:00:00'
-- OR [DATE] > '20160403' AND [DATE] < '20160404'
OR [DATE] = '20160404' AND [TIME] <= '05:00:00'
) ;
Run Code Online (Sandbox Code Playgroud)