2010-12-05 76 views
1

如何檢查2個日期在SQL腳本中是否相等?在SQL Server中比較日期

從前端傳遞的值是「2010-12-04二十二點14分49秒」,並在表的日期是「2010-12-04 22:14:49.253」

我不關心millisec。我想這

DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0 

,並得到了以下錯誤

DateDiff函數導致了 溢出。分隔兩個日期/時間實例的日期部分 的數量是 太大。嘗試使用datediff與 不太精確的日期部分。

+1

我不明白你的樣本。 – 2010-12-05 20:47:58

回答

2

在我的SQL Server(2008 R2)這個片段的T-SQL代碼的工作就好了....

你確定你沒有在你的日期引入一個錯字(如1010-12-04......)不知何故,這樣兩個日期之間的距離真的會很大?

那麼它們之間的秒數的確可以溢連SQL Server的大數字範圍 - 而這正是該錯誤信息是說...

+0

謝謝你有一個錯字。有一個機會,用戶將嘗試搜索更長的差距的日期。在那種情況下,我該如何防止這個錯誤? – dotnetrocks 2010-12-05 20:57:38

+0

@Dotnetrocks:也許你應該檢查DATEDIFF與例如第一天 - 如果差價不到一天,那麼你可以檢查SECONDS。或者只是趕上例外情況 - 如果發生這種情況,日期顯然會相差很遠。 – 2010-12-05 21:10:07

2

你是在對一個datetimeWHERE條款使用呢?

如果因此就使用

DECLARE @d DATETIME = '2010-12-04 22:14:49.000' 

SELECT .... 
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d) 

這將是更優化搜索和高效的反正。

0

這從日期刪除秒

where convert (varchar(10), @date1, 108) + ' ' + CONVERT(varchar(5), @date1, 108) = convert (varchar(10), @date2, 108) + ' ' + CONVERT(varchar(5), @date2, 108) 
0

角色每個像下面的示例中的日期時間值的:

declare @stuff as datetime 
set @stuff = getdate() 
select @stuff 
SELECT CONVERT(VARCHAR(26), @stuff, 120) 

輸出=

2010-12-05 16:17:49.720 

2010-12-05 16:17:49 

轉換爲類型120不包括毫秒。

請按照此LINK進行其他類型的轉換。