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表达式只会return一种类型。因此,您应该检查代码或进行必要的对话。
你可以使用 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
如果你想 return 在这种情况下的原始值,你需要一个 ELSE
:
(CASE WHEN td.originalLinearAirDate IS NULL
THEN '12345678'
ELSE td.originalLinearAirDate
END) As originalLinearAirDate
请注意,如果该列确实是 DATE
,这将 return 出错,因为 '12345678'
无法转换为日期。
这个版本用COALESCE()
表示更好:
COALESCE(td.originalLinearAirDate, '12345678')
我有一个 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表达式只会return一种类型。因此,您应该检查代码或进行必要的对话。
你可以使用 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
如果你想 return 在这种情况下的原始值,你需要一个 ELSE
:
(CASE WHEN td.originalLinearAirDate IS NULL
THEN '12345678'
ELSE td.originalLinearAirDate
END) As originalLinearAirDate
请注意,如果该列确实是 DATE
,这将 return 出错,因为 '12345678'
无法转换为日期。
这个版本用COALESCE()
表示更好:
COALESCE(td.originalLinearAirDate, '12345678')