Sql-Server

日期未提供正確結果的情況

  • June 3, 2020

使用以下查詢時,即使日期大於 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

引用自:https://dba.stackexchange.com/questions/268447