在MySQL中,您可以仅使用一次比较来检查字段是NULL还是空?

ver*_*ric 20 mysql comparison null

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

column = '' OR column IS NULL
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法检查这个而不进行两次单独的比较?

tha*_*tah 33

使用COALESCE()以"正常化"的值(NULL值转换为空字符串);

WHERE COALESCE(mycolumn, '') = ''
Run Code Online (Sandbox Code Playgroud)

阅读文档: COALESCE()

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

WHERE NULLIF(mycolumn, '') IS NULL
Run Code Online (Sandbox Code Playgroud)

文档: NULLIF()

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

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

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

FROM mytable;
Run Code Online (Sandbox Code Playgroud)

这将为表中的每一行并排显示原始值,'coalesce'值和比较结果


Mar*_*lus 0

尝试这个:

WHERE NOT(column LIKE '_%')
Run Code Online (Sandbox Code Playgroud)

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

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

WHERE IFNULL(column, '') = ''
Run Code Online (Sandbox Code Playgroud)