在更大的查询中有这两个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。有办法解决吗?
答案 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