在MySQL中,您能否只使用一次比较来检查字段是否为NULL或空?

在MySQL中,您能否只使用一次比较来检查字段是否为NULL或空?,mysql,null,comparison,Mysql,Null,Comparison,如果我想使用MySQL查询检查字段是否为NULL或空,我知道我可以这样做: column = '' OR column IS NULL 但是,有没有办法在不进行两次单独比较的情况下检查这一点?试试这个: WHERE NOT(column LIKE '_%') 如果没有NOT,列的值必须至少有一个字符,并且不能为NULL 编辑:MySQL似乎仍然以这种方式接受空值。这应该更好地发挥作用: WHERE IFNULL(column, '') = '' 使用COALESCE()对值进行“规范化”(

如果我想使用MySQL查询检查字段是否为NULL或空,我知道我可以这样做:

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

试试这个:

WHERE NOT(column LIKE '_%')
如果没有NOT,列的值必须至少有一个字符,并且不能为
NULL

编辑:MySQL似乎仍然以这种方式接受空值。这应该更好地发挥作用:

WHERE IFNULL(column, '') = ''
使用
COALESCE()
对值进行“规范化”(将空值转换为空字符串)

阅读文档:

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

WHERE NULLIF(mycolumn, '') IS NULL
文件:

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

你可以自己做实验,就这样做

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

FROM mytable;

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

另一种方法没有WHERE,请尝试此方法

WHERE COALESCE(column, '') = ''
将同时选择空值和空值

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

如果COALESCE(mycolumn,“)”,则此函数的负版本是否为
?是的,COALESCE返回第一个非空值。因此,如果
mycolumn
NULL
,它将返回“”。如果
mycolumn
是任何其他值(包括空字符串),则将返回
mycolumn
的值。不过,您应该注意,对WHERE子句中的列值使用任何函数(包括NULLIF、COALESCE等)可能会阻止查询计划器使用该列上的任何索引。因此,虽然时间较长,OP的原始SQL在WHERE子句中的性能可能会更好。我想知道是否有任何性能差异。其他SO帖子说它可能没有什么意义,所以为了标准起见,我会选择“联合”(COALESCE)(即使这个词听起来很野蛮,也不直观)。顺便说一句,如果有人这样做,这可能是一个很好的补充。
SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename