sql - 如何在 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'
))
推荐阅读
- c - 数组中的内存是如何分配的?
- wordpress - 使用 wordpress 为自由职业者网站创建后期项目功能
- python - CSV 文件的文件名不能使用 Python 变量
- python - 将嵌套的 JSON streamind 数据转换为 ndjson
- python - 需要去掉单引号
- python - 绘制半径为 R 的球体
- javascript - 如何使用函数 true 在 jquery 步骤中验证隐藏的空字段
- android - SHA-1 问题的 Android Studio v4.1 签名报告
- node.js - 在 Selenium Grid 4 alpha 6 中访问 chrome 驱动程序开发工具,
- html - 我如何将图像作为背景放在 reatcjs 上的多个组件下