NULL条件的CASE表达式不起作用

问题描述 投票:0回答:3

我有一个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;
sql case sqlanywhere
3个回答
0
投票

你可以使用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;

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表达式只返回一种类型。因此,您应该检查代码或进行必要的对话。


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')
© www.soinside.com 2019 - 2024. All rights reserved.