2013-06-26 59 views
3

我有一份聲明中設置如下:如何比較SQL中的日期時間以排除相同的日期?

SELECT * 
FROM Events 
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime 

現在,它返回的每一個事件,包括那些在那個時候,這意味着我必須處理查詢後的事件發生。有沒有辦法設置此查詢,以便它只返回EventTime大於給定字符串datetime的事件?

基本上,<運營商似乎被視爲<=,我不想這樣做。

+3

我不能重現此http://sqlfiddle.com/#!6/9cb8a/12/0 –

+2

你能提供樣品「EVENTTIME '價值觀? –

+1

@TimSchmelter也許'EventTime'具有毫秒精度:http://sqlfiddle.com/#!6/9cb8a/17 –

回答

0

首先你的字符串日期類型是模糊的:你需要使用6 JUN 2013作爲日期部分,或者JUN 6 2013YYYY/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秒的邊界。

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