从表中选择值可以为null

时间:2012-09-12 09:24:33

标签: postgresql select null

我尝试从这样一个表中选择:

SELECT * FROM table1 where id=311
         and date BETWEEN '2012-09-01' And '2012-09-09' 
         and col2='a'
         and (col3 ='m' 
              or col3 ='n' 
              or col3=' ' )
ORDER BY date

在表格中我的情况是col3的值为'm','n'或null,但是这个select不返回col3具有空值的行

5 个答案:

答案 0 :(得分:3)

NULL不是' '使用col3 is null

答案 1 :(得分:2)

数据库中有三值逻辑: TRUE,FALSE,NULL(未知)

col3 =''是一个真实的条件,

col3为空是未知条件。

他们是不同的。

所以你必须使用

  

col3为空

您可以参考Wikipedia's "NULL" entry

答案 2 :(得分:1)

NULL不等于'm','n'或''。 NULL甚至不等于NULL。使用:

SELECT * FROM table1 where id=311
         and date BETWEEN '2012-09-01' And '2012-09-09' 
         and col2='a'
         and (col3 ='m' 
              or col3 ='n' 
              or col3 IS NULL)
ORDER BY date

答案 3 :(得分:1)

SELECT * 
FROM table1 
where 
    id=311
    and date BETWEEN '2012-09-01' And '2012-09-09' 
    and col2='a'
    and (
        col3 ='m' 
        or col3 ='n' 
        or col3 is null 
    )
ORDER BY date

答案 4 :(得分:1)

这是避免OR列表的一个很好的技巧,也避免使用OR IS NULL

SELECT * 
FROM table1
WHERE id=311
 AND zdate BETWEEN '2012-09-01' AND '2012-09-09' 
 AND col2='a'
 AND COALESCE(col3, 'm') IN ('m', 'n' )
ORDER BY zdate
   ;