如何解决如何在SQL中的WHERE CLAUSE内的CASE中添加sql“BETWEEN”条件
我有一个 sql 查询,我需要根据一个条件在 where 子句中添加不同的语句(语句之间)。如果 TX.APPLICATION_ID 是“CONV”,那么我需要在 SYS_CREATION_DATE 添加过滤日期范围,如果 APPLICATION_ID 不是“CONV”,那么我需要在 TRANS_DATE 添加过滤日期范围。这是我正在尝试并收到“缺少关键字”错误的内容。请推荐
WHERE TX.TRANS_TYPE IN ('CREDIT','CREDITR','CREDITR9','DSPJUS')
AND
CASE
WHEN TRIM(TX.APPLICATION_ID) = 'CONV'
THEN
TX.SYS_CREATION_DATE BETWEEN TO_DATE('20200831','YYYYMMDD') AND TO_DATE('20200831','YYYYMMDD')
ELSE
TX.TRANS_DATE BETWEEN TO_DATE('20200831','YYYYMMDD') AND TO_DATE('20200831','YYYYMMDD')
END
解决方法
您应该删除 CASE
表达式逻辑,它通常从不属于 WHERE
子句。相反,使用香草 AND
/OR
:
WHERE
TX.TRANS_TYPE IN ('CREDIT','CREDITR','CREDITR9','DSPJUS') AND (
(
TRIM(TX.APPLICATION_ID) = 'CONV' AND
TX.SYS_CREATION_DATE >= date '20200831' AND
TX.SYS_CREATION_DATE < date '20200901'
)
OR
(
TRIM(TX.APPLICATION_ID) <> 'CONV' AND
TX.TRANS_DATE >= date '20200831' AND
TX.TRANS_DATE < date '20200901'
))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。