2016-09-29 60 views
0

如果 datetime2(7)類型與另一個類型相等,我正在尋找在TSQL WHERE子句中測試的正確語法。用於比較日期的TSQL查詢的正確語法

WHERE (CAST(modifiedDate AS DATETIME) = '9/29/2016 3:24:24 PM') 

我也試過

WHERE (CAST(modifiedDate AS DATETIME) LIKE '9/29/2016 3:24:24 PM') 

而且

WHERE (CAST(modifiedDate AS datetime2) = CAST('09/29/2016 3:24:24 PM' AS datetime2)) 

我相信我有右側陳述不正確,但在數據庫中的精確值。

我正在查找與該日期時間戳匹配的所有記錄。

要清楚我曾嘗試尋找其他的結果..」

enter image description here

我認爲這是對本網站的搜索結果有點片狀。

DB字段類型...

enter image description here

+0

鑄造日期時間會給你milleseconds爲好。所以上述不起作用。嘗試使用毫秒進行比較,或者在第二秒內做一次範圍檢查 – ash

回答

2

要比較DATETIME值,需要使用DATETIME值進行比較。您可以使用TSQL CONVERT函數將字符串轉換爲DATETIME數據類型。例如:

CONVERT(DATETIME, '2016-09-28 15:34:00', 20) 

請注意,第三個參數是「樣式」。上面的示例使用樣式20,ODBC規範樣式YYYY-MM-DD HH:MI:SS(24小時制)。還有其他幾種可用的樣式,也許你會找到一個符合你的字符串格式的樣式。 (如果找不到匹配項,則需要使用一些字符串操作函數將字符串重新格式化爲可用樣式的格式。)

作爲第二個參數,可以使用字符串文字(如上例所示),或者您可以使用對CHAR或VARCHAR列的引用。

參考:CAST and CONVERT (Transact-SQL)

https://msdn.microsoft.com/en-us/library/ms187928.aspx


在一個不同的,但相互關聯,注意:爲什麼日期時間值被存儲在數據庫中的字符串,而不是DATETIME數據類型?


如果列的數據類型是DATETIME2(7),那麼我認爲你會希望比較DATETIME2(7)數據類型。

如果我們做一個「等於」的比較,那將是一個確切的匹配,包括小數秒。如果你想從一個給定的第二匹配DATETIME2(7)值,你可以使用一個範圍比較:

WHERE t.my_col_datetime2_7 >= '2016-09-29 15:24:24' 
    AND t.my_col_datetime2_7 < '2016-09-29 15:24:25' 

注允許比較DATETIME2字符串文字的格式是YYYY-MM-DD HH:MI:SS(24小時制)可選小數秒.nnnnnnn

參考:Supported String Literal Formats for datetime2

https://msdn.microsoft.com/en-us/library/bb677335.aspx

+0

它們被存儲爲datetime2(7) – htm11h

+0

這也不起作用.... WHERE(CONVERT(DATETIME,modifiedDate,20)= CONVERT(DATETIME,'09/29/2016 3:24:24 PM',20 )) – htm11h

+0

查看鏈接 – htm11h

0

不知道哪裏出現了問題。我想這取決於你如何存儲你的日期值。如果它是datetime2,這工作正常。

DECLARE @testtable TABLE(
ID INT 
, modifieddate DATETIME2) 

INSERT INTO @testtable 
(id, modifieddate) 
VALUES 

(1, '9/29/2016 3:24:24 PM'), 
(2, '2/01/2016 3:24:24 PM'), 
(3, '6/25/2016 3:24:24 PM') 



SELECT * 
FROM @testtable 

SELECT * 
FROM @testtable 
WHERE CAST(modifieddate AS DATETIME2) = '09/29/2016 3:24:24 PM' 

SELECT * 
FROM @testtable 
WHERE modifieddate = '9/29/2016 3:24:24 PM' 

SELECT * 
FROM @testtable 
WHERE modifieddate = CAST('09/29/2016 3:24:24 PM' AS DATETIME2) 
+0

不起作用,我也嘗試過。 – htm11h

+0

是的。查看示例代碼。 – dfundako

+0

我的日期字段具有像這樣的值='9/29/2016 3:24:24 PM' – htm11h