单SQL语句实现可选参数查询并正确处理NULL值的方案咨询
解决方案
核心逻辑:我们需要在参数为全量通配符%(即未指定筛选条件)时返回所有记录(含NULL),参数为具体筛选值时仅返回匹配的非NULL记录,因此可以通过参数判断拆分条件:
最优通用写法(兼容所有SQL语法规范)
SELECT * FROM Table WHERE #element = '%' OR oper_cd_id_principal LIKE #element
逻辑说明:
- 当需要返回全量数据时,给
#element传%:此时第一个判断条件为真,整行WHERE条件成立,所有记录(包括oper_cd_id_principal为NULL的记录)都会被返回,解决第一种写法无法覆盖NULL值的问题。 - 当需要筛选具体值时,给
#element传对应值(支持带通配符,比如A%、%B%):此时第一个判断条件不成立,仅走LIKE匹配逻辑,oper_cd_id_principal为NULL的记录不满足LIKE条件,不会被返回,解决第二种写法额外返回NULL记录的问题。
限定场景可选写法
如果你的业务场景中永远不需要筛选oper_cd_id_principal等于空字符串的记录,也可以用COALESCE函数转换NULL值后匹配:
SELECT * FROM Table WHERE COALESCE(oper_cd_id_principal, '') LIKE #element
该写法原理是把NULL值临时转换为空字符串,当#element为%时,空字符串也会被匹配到,从而返回NULL记录;但如果传入的#element为''时,会把NULL值也当做匹配结果返回,不符合通用需求,仅适合特定场景使用。
内容的提问来源于stack exchange,提问作者user16728667
相关产品推荐
相关产品推荐

