簡體   English   中英

NULL條件的CASE表達式不起作用

[英]CASE expression for NULL condition is not working

我有一個SQL查詢,其中case表達式不起作用,因為我得到NULL值。

知道如何解決這個問題嗎?

select 
td.reportEndDate,
    CASE td.originalLinearAirDate
    WHEN NULL THEN '12345678'
    END As originalLinearAirDate
from 
FROM DBA.Telecast td 
where id = 2
order by
td.reportEndDate,
originalLinearAirDate;

你可以使用COALESCE()

SELECT td.reportEndDate, 
       COALESCE(td.originalLinearAirDate, '12345678') AS originalLinearAirDate -- Use default date instead of '12345678'
FROM DBA.Telecast td 
WHERE id = 2
ORDER BY td.reportEndDate, originalLinearAirDate;

在你的case表達式中,你沒有指定ELSE部分,因此你得到了NULL

但是,case表達式只返回一種類型。 因此,您應該檢查代碼或進行必要的對話。

你可以使用isnull

select 
td.reportEndDate,
    CASE WHEN td.originalLinearAirDate IS NULL THEN '19000101'
         ELSE td.originalLinearAirDate 
    END As originalLinearAirDate
from 
FROM DBA.Telecast td 
where id = 2
order by
td.reportEndDate,
originalLinearAirDate;

問題是NULL比較。 即使在CASE表達式中進行比較時,也不會進行比較。

如果您想使用CASE執行此操作,則需要使用IS NULL

(CASE WHEN td.originalLinearAirDate IS NULL
      THEN '12345678'
 END) As originalLinearAirDate

如果要在這種情況下返回原始值,則需要ELSE

(CASE WHEN td.originalLinearAirDate IS NULL
      THEN '12345678'
      ELSE td.originalLinearAirDate 
 END) As originalLinearAirDate

請注意,如果列實際上是DATE ,則會返回錯誤,因為'12345678'無法轉換為日期。

使用COALESCE()可以更好地表達此版本:

COALESCE(td.originalLinearAirDate, '12345678')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM