sql - 谓词中的 CASE 中为 NULL
问题描述
请告诉我,这是真的 - 使用 CASE 构造,其中带有 IS NULL/IS NOT NULL 的表达式将在 TNEN 中返回?我在一个包中有一个接收输入参数的过程,它被传递给游标中的选择器,我想设置一个谓词:
select t1...
t2...
from test t1,
test t2
where t1.flg = 'N'
AND t2.field = 'supertest'
AND CASE
WHEN input_parm = 'Y' THEN t1.id IS NOT NULL
WHEN input_parm = 'N' THEN t1.id IS NULL
WHEN input_parm IS NULL THEN
ELSE t1.id = input_parm
END
input_parm - 是进入程序的参数
- 如果 input_parm=Y 则 t1.id 字段不等于 null
- 如果 input_parm=N 则 t1.id 字段等于 null
- 如果 input_parm 为空,则不应考虑此条件,这些选择器应同时来自 IS NULL 和 IS NOT NULL
- 如果 input_parm 不是 NULL 并且 !='Y' 和 !='N' 则 t1.id=input_parm
在示例中,编译器在 THEN 之后发誓 IS NULL。你能帮我吗?
解决方案
表达式的谓词CASE
(即THEN
和后面的ELSE
)必须是文字值,而不是布尔表达式。您可以将CASE
表达式重构为:
AND
(input_parm = 'Y' AND t1.id IS NOT NULL) OR
(input_parm = 'N' AND t1.id IS NULL) OR
input_parm IS NULL OR
t1.id = input_parm
推荐阅读
- javascript - 将变量从车把传递到nodejs中的javascript
- python - 基本 Pandas 过滤适用于小数据集,但不适用于大数据集
- azure-service-fabric - 如何使用 keyvault 证书连接到 servicefabric
- javascript - Progressive Web App - 页面无法离线工作错误
- javascript - 引导模板“切换菜单”按钮在 Angular 中不起作用
- r - 更改 data.frame 中的单行名称
- javascript - How to change hidden-input value then send it using django forms?
- python - Keras - TypeError: 'NoneType' object cannot be interpreted as an index
- apache-spark - 在上下文 localhost:18080/sparkhistory 上运行 Spark 历史服务器,而不是在端口 localhost:18080
- python - 如何在熊猫数据框行中检测到第一个非 nan 值后找到前 5 个值(包括 nans)?