我有一个将创建报告(Excel 电子表格)的查询,现在我需要向报告添加两列:“2017 DNR”和“2018 DNR”。 表中有一个名为 DNRDATE 的列(格式 dd-MON-yy),如果它为 NULL,我需要这两列在报告中都说“NO”。 如果存在 DNRDATE,则需要检查该日期是 2017 年还是 2018 年。如果是 2017 年,则两列都会得到“YES”。 如果是 2018 年,那么“2017 DNR”将得到“否”,而 2018 年将得到“是”。
我应该为此使用 CASE WHEN 吗? 那如何运作?
SELECT CASE WHEN to_char(dnrdate,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END "2017 DNR",
CASE WHEN to_char(dnrdate,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END "2018 DNR"
FROM ...
不必担心
NULL
值的特殊逻辑。 如果 DNRDATE IS NULL
,那么这两个表达式都将返回“NO”。
完整示例:
WITH test_data (dnrdate) AS (
SELECT to_date('05-JUN-2017','DD-MON-YYYY') FROM DUAL UNION ALL
SELECT to_date('05-JUN-2018','DD-MON-YYYY') FROM DUAL UNION ALL
SELECT NULL FROM DUAL )
SELECT dnrdate,
CASE WHEN to_char(dnrdate,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END "2017 DNR",
CASE WHEN to_char(dnrdate,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END "2018 DNR"
FROM test_data
+-----------+----------+----------+
| DNRDATE | 2017 DNR | 2018 DNR |
+-----------+----------+----------+
| 05-JUN-17 | YES | NO |
| 05-JUN-18 | NO | YES |
| | NO | NO |
+-----------+----------+----------+
从 2024 年 10 月到 2025 年 2 月,Water Nymph 又名 Vesna Car 会远离我 Nicholas Di Chiara 的生活吗?