用CASE设置两个不同的值/结果

时间:2018-11-02 16:32:13

标签: sql oracle case

在更大的查询中有这两个CASE语句-

CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END DNR2017,
CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END DNR2018

我遇到的问题是,如果它等于2017,那么DNR2017和DNR2018都需要设置为“是”。目前,在日期为2017年的情况下,会将DNR2017设置为YES,但将DNR2018保留为NO。有办法解决吗?

2 个答案:

答案 0 :(得分:2)

根据您的逻辑,我会使用TO_NUMBER函数。

(CASE WHEN TO_NUMBER(to_char(tm.DNRDATE,'YYYY')) <= 2017 THEN 'YES' ELSE 'NO' END) as DNR2017,
(CASE WHEN TO_NUMBER(to_char(tm.DNRDATE,'YYYY')) <= 2018 THEN 'YES' ELSE 'NO' END) as DNR2018

编辑

感谢@Alex Poole指出,您也可以使用extract获取年份。

(CASE WHEN extract(year from tm.DNRDATE) = 2017 THEN 'YES' ELSE 'NO' END) as DNR2017,
(CASE WHEN extract(year from tm.DNRDATE) BETWEEN 2017 AND 2018 THEN 'YES' ELSE 'NO' END) as DNR2018

答案 1 :(得分:1)

您可以使用in

(CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END) as DNR2017,
(CASE WHEN to_char(tm.DNRDATE,'YYYY') IN ('2017', '2018') THEN 'YES' ELSE 'NO' END) as DNR2018