我有一份聲明中設置如下:如何比較SQL中的日期時間以排除相同的日期?
SELECT *
FROM Events
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
現在,它返回的每一個事件,包括那些在那個時候,這意味着我必須處理查詢後的事件發生。有沒有辦法設置此查詢,以便它只返回EventTime
大於給定字符串datetime的事件?
基本上,<
運營商似乎被視爲<=
,我不想這樣做。
我有一份聲明中設置如下:如何比較SQL中的日期時間以排除相同的日期?
SELECT *
FROM Events
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
現在,它返回的每一個事件,包括那些在那個時候,這意味着我必須處理查詢後的事件發生。有沒有辦法設置此查詢,以便它只返回EventTime
大於給定字符串datetime的事件?
基本上,<
運營商似乎被視爲<=
,我不想這樣做。
首先你的字符串日期類型是模糊的:你需要使用6 JUN 2013
作爲日期部分,或者JUN 6 2013
或YYYY/MM/DD HH:NN:SS
實際上它會變爲毫秒。
你也可能不會得到充分利用你的索引上EventTime
爲依賴於SQL版本:EventTime > CAST('6/6/2013 10:14:30 PM' AS DATETIME)
沒有以同樣的方式評估爲CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
如果EventTime
作爲計算2013/6/6 10:14:30.001
然後SQL運行正常。您可能要使用DATEDIFF(Seconds, EventTime, '2013/6/6 10:14:30') > 0
(可能會小於),這將評估交叉邊界的數量。參考:http://msdn.microsoft.com/en-us/library/ms189794.aspx
我懷疑你想要返回2013/6/6 10:14:31
跨越1秒的邊界。
你可以使用SQL Server的DATEDIFF功能,像這樣:
SELECT *
FROM Events
WHERE DATEDIFF(Second, Cast('6/6/2013 10:14:30 PM' AS DATETIME) , @EventTime) < 0
--^^ this can be changed to what ever accuracy you want
我不能重現此http://sqlfiddle.com/#!6/9cb8a/12/0 –
你能提供樣品「EVENTTIME '價值觀? –
@TimSchmelter也許'EventTime'具有毫秒精度:http://sqlfiddle.com/#!6/9cb8a/17 –