如何检查MySQL中的列是否为空或空?

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

(e.g. null or '' or '  ' or '      ' and ...)
957992 次浏览

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


你可以使用WHERE col IS NULLWHERE col IS NOT NULL来测试一个列是否为空。

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL

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

如。

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

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

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

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

更多信息请参见修剪 合并为空

还有MySQL文档中的使用空值

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

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

试一试

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


-> 0, 0, 1

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

Reference .

检查空值

$column is null
isnull($column)

检查是否为空

$column != ""
但是,你应该总是为列设置NOT NULL,
mysql优化只能处理一个IS NULL级别 < / p >

这将选择所有some_colNULL''(空字符串)的行。

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

根据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;

写条件的一种更简短的方法:

WHERE some_col > ''

由于null > ''会产生unknown,这将过滤掉null和空字符串。

我讨厌数据库中杂乱的字段。如果列可能是一个空白字符串或null,我宁愿在每次执行选择之前修复这个问题,像这样:

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

这可以保持数据整洁,只要您不需要出于某种原因特别区分NULL和empty。

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

将选择空值和空值

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

这句话对我来说更清晰更易读:

select * from my_table where ISNULL(NULLIF(some_col, ''));

当在我的项目中检查一个列的null or Empty值时,我注意到在各种数据库中有一些支持问题。

不是所有数据库都支持TRIM< / >强的方法。

下面是一个矩阵,只是为了了解不同数据库支持的方法。

SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。最常被删除的模式是空白。这个函数在不同的数据库中调用方式不同:

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracle: RTRIM(), LTRIM()
  • SQL服务器: RTRIM(), LTRIM()

空/空检查方法:- .

下面是两种不同的方法根据不同的数据库-

这些trim函数的语法如下:

  1. < p > 使用Trim检查-

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL < / p >

  2. < p > 使用LTRIM &RTRIM检查-

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL < / p >

以上两种方法提供相同的结果,只是基于您的数据库支持使用。如果LastName为空,则返回UserDetails表中的FirstName

希望这对你有所帮助:)

如果数据类型为字符串且行为空,请尝试此操作

SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

如果数据类型为int或列为0,则尝试此操作

SELECT * FROM table WHERE column_name > = 0
SELECT column_name FROM table_name WHERE column_name IN (NULL, '')

要么

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

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
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';

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

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

获取包含NULL, 0, ", '', ''的行

    SELECT * FROM table WHERE some_col IS NOT TRUE;

获取没有NULL, 0, ", '', ''的行

    SELECT * FROM table WHERE some_col IS TRUE;

我的意见。

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

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

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

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

下面的SQL查询工作正常。

SELECT * FROM <table-name> WHERE <column-name> IS NULL;