我有一个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;
答案 0 :(得分:0)
您可以使用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表达式将仅返回一种类型。因此,您应该检查代码或进行必要的对话。
答案 1 :(得分:0)
您可以使用isull
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;
答案 2 :(得分:0)
问题是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')