Oracle中SELECT查询如何将非匹配指定条件的列值设置为null
Oracle SELECT按指定参数匹配列值、不匹配返回null的实现方案
直接对需要判断的字段做等值比对即可,不需要复杂查询逻辑,两种常用写法都能满足需求:
写法1:通用CASE表达式(所有SQL环境通用,可读性好)
逐列判断字段值是否和页面项参数:p4_number相等,相等返回字段原值,不相等统一返回null:
SELECT id, CASE WHEN first_numbers = :p4_number THEN first_numbers ELSE NULL END AS first_numbers, CASE WHEN second_numbers = :p4_number THEN second_numbers ELSE NULL END AS second_numbers FROM 你的主表实际表名;
写法2:Oracle原生DECODE函数(写法更简洁)
利用Oracle内置DECODE函数的特性:匹配不到目标值且未指定默认返回值时,默认返回null,刚好匹配需求:
SELECT id, DECODE(first_numbers, :p4_number, first_numbers) AS first_numbers, DECODE(second_numbers, :p4_number, second_numbers) AS second_numbers FROM 你的主表实际表名;
结果验证
传入参数:p4_number = 1112时,对你给出的2行样例数据,两种写法的返回结果完全符合预期:
- 第一行原始值
id=1、first_numbers=1112、second_numbers=2222:返回id=1、first_numbers=1112、second_numbers=null - 第二行原始值
id=1、first_numbers=3434、second_numbers=1112:返回id=1、first_numbers=null、second_numbers=1112
注意:如果你的
first_numbers或second_numbers字段可能存储null值,需要在判断时补充null值兼容逻辑,比如把first_numbers = :p4_number替换为first_numbers = :p4_number OR (first_numbers is null and :p4_number is null)即可。
内容的提问来源于stack exchange,提问作者Arifullah
相关产品推荐
相关产品推荐

