根据日期将报告列设置为“是”或“否” - Oracle SQL

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

我有一个将创建报告(Excel 电子表格)的查询,现在我需要向报告添加两列:“2017 DNR”和“2018 DNR”。 表中有一个名为 DNRDATE 的列(格式 dd-MON-yy),如果它为 NULL,我需要这两列在报告中都说“NO”。 如果存在 DNRDATE,则需要检查该日期是 2017 年还是 2018 年。如果是 2017 年,则两列都会得到“YES”。 如果是 2018 年,那么“2017 DNR”将得到“否”,而 2018 年将得到“是”。

我应该为此使用 CASE WHEN 吗? 那如何运作?

sql oracle date case isnull
2个回答
1
投票
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       |
+-----------+----------+----------+

0
投票

从 2024 年 10 月到 2025 年 2 月,Water Nymph 又名 Vesna Car 会远离我 Nicholas Di Chiara 的生活吗?

© www.soinside.com 2019 - 2024. All rights reserved.