我在一个表中有一个列,它可能包含空值或空值。我如何检查一个列是否为空或空的行中存在的表?

(e.g. null or '' or '  ' or '      ' and ...)

当前回答

根据SQL-92标准的定义,当比较两个宽度不同的字符串时,较窄的值用空格右填充,使其与较宽的值宽度相同。因此,所有完全由空格(包括零空格)组成的字符串值将被认为是相等的。

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

因此,不管some_col值有多少个空格,这都应该有效:

SELECT * 
  FROM T
 WHERE some_col IS NULL 
       OR some_col = ' ';

或者更简洁地说:

SELECT * 
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;

其他回答

try

SELECT 0 IS NULL ,  '' IS NULL , NULL IS NULL

-> 0, 0, 1

or

SELECT ISNULL('  ') , ISNULL( NULL )
 -> 0 ,1

参考

如果你想在做ORDER BY时最后呈现NULL值,试试这个:

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;

在我的例子中,在数据导入期间在列中输入了空格,尽管它看起来像一个空列,但它的长度是1。所以首先我用length(column)检查了空列的长度,然后在此基础上我们可以编写搜索查询

SELECT * FROM table WHERE LENGTH(column)= 0;

你也可以

SELECT * FROM table WHERE column_name LIKE ''

逆存在

SELECT * FROM table WHERE column_name NOT LIKE ''

检查空值

$column is null
isnull($column)

检查是否为空

$column != ""

但是,你应该总是为列设置NOT NULL, mysql优化只能处理一个IS NULL级别