我有一個疑問
SELECT *
FROM SAMPLETABLE
WHERE CAST(CreatedDate AS DATETIME) = '2020-01-01 09:00:58'
這對我有用。但我在 yyyy-MM-dd hh:ss 中輸入了
SELECT *
FROM SAMPLETABLE
WHERE CAST(CreatedDate AS DATETIME) = '2020-01-01 09:00'
它回傳零記錄。如何過濾這些資料?
uj5u.com熱心網友回復:
當您與 進行比較datetime時datetime,將比較整個值(包括小數秒)。只有當兩個運算元真正相等時,Equality 才會為您提供 true。
當您與字串進行比較時,SQL Server 將嘗試將其中一個值轉換為另一個值的資料型別。這稱為隱式轉換。在datetimeand 的情況下,由于資料型別優先級varchar,varchar將被轉換為datetime(當找到適當的規則來轉換字串時)。
因此,您不能說任何給定的日期時間值等于任何表示日期和時間的任意字串。
您希望獲得2020-01-01 09:00:00.000和范圍內的所有值2020-01-01 09:00:59.999,但這不是日期和時間在 SQL 中的作業方式。
如果您可以有這樣的輸入,您要么必須解釋它們并使用您期望的間隔進行搜索,例如
SELECT *
FROM SAMPLETABLE
WHERE CreatedDate >= '2020-01-01 09:00:00.000'
AND CreatedDate < '2020-01-01 09:01:00.000'
或者您可以將日期時間值轉換為您獲得的字串格式:
SELECT *
FROM SAMPLETABLE
WHERE FORMAT(CreatedDate, 'yyyy-MM-dd HH:mm') = '2020-01-01 09:00'
由于對欄位本身進行了轉換(計算),第二種方法在大多數 RDBMS(當然是 SQL Server)中的性能較低,這將阻止資料庫服務器在所述列上使用索引/來幫助所述過濾器。
請注意,datetime如果您的列datetime已經是一個,您不必將其轉換/轉換為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369108.html
標籤:sql sql-server 查询语句
