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

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

当前回答

要么

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename

or

SELECT case when field1 IS NULL or field1 = ''
        then 'empty'
        else field1
   end as field1 from tablename

其他回答

你也可以

SELECT * FROM table WHERE column_name LIKE ''

逆存在

SELECT * FROM table WHERE column_name NOT LIKE ''
select * from table where length(RTRIM(LTRIM(column_name))) > 0

请注意:最好把它练习在答案的最后。


你可以使用WHERE col is null或WHERE col is not null来测试一个列是否为空。

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

在你的例子中,你有各种各样的空白排列。您可以使用TRIM删除空白,也可以使用COALESCE默认为NULL值(COALESCE将从您提供的值中返回第一个非空值。

e.g.

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '')) = '' 

最后一个查询将返回MyCol为空或任意长度的空白的行。

如果可以避免,最好不要在WHERE子句中的列上使用函数,因为这会使使用索引变得困难。如果你只是想检查一个列是空还是空,你最好这样做:

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

更多信息请参见TRIM COALESCE和IS NULL。

同时使用MySQL文档中的空值

我的意见。

在MySQL中,你可以使用COALESCE函数:

返回列表中的第一个非NULL值,如果没有非NULL值,则返回NULL。

所以你可以这样简化你的查询:

SELECT * FROM table WHERE COALESCE(some_col, '') = '';

try

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

-> 0, 0, 1

or

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

参考