我正在编写一个pgplsql函数,其中我有一个变量var
,可以是NULL
或者是valorized。在稍后的查询中我做:
SELECT * FROM table WHERE column = var
如果是NULL var,则变为
SELECT * FROM table WHERE column = NULL
因此,查询失败并返回NULL,因为PostgreSQL documentation表示
空值表示未知值,并且不知道两个未知值是否相等
我用CASE
声明解决了这个问题:
SELECT * FROM table WHERE
( CASE WHEN var IS NULL THEN column IS NULL ELSE column = var END ) = TRUE
但我不确定这是解决问题的最佳方法......你有什么好的选择吗?
答案 0 :(得分:5)
SELECT * FROM table WHERE column IS NOT DISTINCT FROM var
答案 1 :(得分:1)
如果var
的值为NULL,您真的只想选择列值为NULL的记录吗?或者你想把它当作'全选'/'不限制'?
如果后者适用,那么这样的方法就可以了。 (这是伪代码,因为我是MSSQL的原生代码。)
SELECT * FROM table WHERE
(var IS NULL AND column = column) OR column = var