[英]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.