PostgreSQL中适配动态类型(Null/字符串)的过滤查询问题
适配NULL与字符串参数的PostgreSQL查询语句调整方案
有两种实用方法可以解决这个问题,让查询语句同时支持参数为字符串或NULL的场景:
方法1:使用IS NOT DISTINCT FROM运算符
PostgreSQL内置的IS NOT DISTINCT FROM运算符会自动处理NULL值的比较逻辑——当两边均为NULL时返回true,两边为相等的非NULL值时也返回true,刚好适配你的需求:
select * from table where category IS NOT DISTINCT FROM $1
方法2:显式判断参数是否为NULL
如果需要更直观的逻辑展示,可以通过条件分支分别处理两种情况:
select * from table where ($1 IS NULL AND category IS NULL) OR (category = $1)
这种写法逻辑清晰,能明确看到NULL值和非NULL值的匹配规则,适合需要自定义逻辑的场景。
内容的提问来源于stack exchange,提问作者movila
相关产品推荐
相关产品推荐

