繁体   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