Sql-Server
日期未提供正確結果的情況
使用以下查詢時,即使日期大於 2020 年 12 月 31 日,“Result_field”也會返回“NO”。如何在日期大於 2020 年 12 月 31 日時顯示“是”,在小於時顯示“否”?一直在嘗試研究這個,現在需要幫助。這可能是一個簡單的查詢,但我對此有點陌生。提前致謝。
SELECT Date_field, CASE WHEN Date_field < '2020-12-31' THEN 'NO' ELSE 'YES' end as Result_field FROM Yearly_Report;
這是我得到的結果:
在沒有看到表定義的情況下,這是一種有根據的猜測,但看起來您的 Date_Field 是一個字元串欄位(VARCHAR、NVARCHAR 等),而不是 DATE 或 DATETIME 欄位。
根據這個 fiddle,當定義為 VARCHAR 欄位時,結果都是“否”,因為比較是字元串到字元串並且沒有任何意義(一個字元串不能小於另一個字元串)。當定義為 DATE 欄位時,比較值會隱式轉換為 DATE 值,然後可以成功進行比較。
正確的解決方案可能是將 Date_Field 列的數據類型更改為 DATE 或 DATETIME,但是,如果這不可能,您可以使用 TRY_PARSE 單獨在查詢中解決此問題:
SELECT DateField, CASE WHEN TRY_PARSE(DateField AS DATE USING 'en-US') < '2020-12-31' THEN 'NO' ELSE 'YES' end as ResultField FROM Dates;
您可以看到小提琴中的結果與預期的一樣:
DateField ResultField ----------------------- 06/30/2022 YES 06/30/2018 NO 12/31/2022 YES 06/30/2020 NO 09/30/2020 NO 03/31/2020 NO 03/31/2024 YES 06/30/2021 YES