20

如果我想使用 MySQL 查询检查某个字段是否为 NULL 或为空,我知道我可以执行以下操作:

column = '' OR column IS NULL

但是,有没有办法在不进行两次单独比较的情况下检查这一点?

4

4 回答 4

35

用于COALESCE()“规范化”值(将 NULL 值转换为空字符串);

WHERE COALESCE(mycolumn, '') = ''

阅读文档:COALESCE()

或者反过来;将空字符串转换为 NULL;

WHERE NULLIF(mycolumn, '') IS NULL

文档:NULLIF()

在这两个中,我更喜欢 COALESCE() 因为它是 ANSI SQL 标准的一部分

你可以自己试验一下,就这样做;

SELECT 
    mycolumn                      AS orig_value,
    COALESCE(mycolumn, '')        AS coalesce_value,
    (COALESCE(mycolumn, '') = '') AS compare_result

FROM mytable;

这将并排显示表中每一行的原始值、“合并”值和比较结果

于 2013-04-12T21:25:59.870 回答
3
WHERE COALESCE(column, '') = ''
于 2013-04-12T21:26:01.273 回答
2

另一种没有 WHERE 的方法,试试这个..

将同时选择 Empty 和 NULL 值

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
于 2016-03-01T12:52:46.940 回答
0

尝试这个:

WHERE NOT(column LIKE '_%')

如果没有 NOT,则 column 的值必须至少有一个字符,并且不能是NULL

编辑:MySQL 似乎仍然以这种方式吞下 NULL 值。这应该会更好:

WHERE IFNULL(column, '') = ''
于 2013-04-12T21:20:00.613 回答