如何在mysql中检查列是空还是空

时间:2011-12-12 06:49:37

标签: mysql sql

我在表中有一列可能包含null或空值。如何在表中存在的行中检查列是空还是空。

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

19 个答案:

答案 0 :(得分:375)

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

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

答案 1 :(得分:124)

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

答案 2 :(得分:55)

编写条件的简短方法:

WHERE some_col > ''

由于null > ''生成unknown,因此可以过滤掉null和空字符串。

答案 3 :(得分:12)

您可以使用WHERE col IS NULLWHERE 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 COALESCEIS NULL

来自MySQL文档的Working with null values

答案 4 :(得分:9)

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

将同时选择Empty和NULL值

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

答案 5 :(得分:6)

要么

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

答案 6 :(得分:5)

我讨厌数据库中的杂乱字段。如果列可能是空字符串或null,我宁愿在每次执行select之前修复此问题,如下所示:

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

这样可以保持数据整洁,只要您不需要因为某种原因明确区分NULL和空。

答案 7 :(得分:4)

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

-> 0, 0, 1

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

Reference

答案 8 :(得分:3)

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

每个数据库都不支持 TRIM 方法。< / em>的

以下是了解不同数据库支持的方法的矩阵。

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

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracle: RTRIM(), LTRIM()
  • SQL Server: RTRIM(), LTRIM()

如何检查空/空: -

  

以下是根据不同数据库的两种不同方式 -

这些修剪函数的语法是:

  1. 使用Trim检查 -

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. 使用LTRIM&amp; RTRIM检查 -

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

  3. 以上两种方式都提供相同的结果,只需根据您的DataBase支持使用。它只是从FirstName表中返回UserDetails,如果它有空LastName

    希望这会对您有所帮助:)

答案 9 :(得分:2)

如果您想在执行ORDER BY时最后显示NULL值,请尝试以下操作:

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

答案 10 :(得分:2)

您也可以

SELECT * FROM table WHERE column_name LIKE ''

反向

SELECT * FROM table WHERE column_name NOT LIKE ''

答案 11 :(得分:2)

这句话对我来说更清晰,更具可读性:

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

答案 12 :(得分:1)

检查空

$column is null
isnull($column)

检查空

$column != ""

但是,您应该始终为列设置NOT NULL,
mysql optimization can handle only one IS NULL level

答案 13 :(得分:0)

select * from table where length(RTRIM(LTRIM(column_name))) > 0

答案 14 :(得分:0)

SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';

答案 15 :(得分:0)

在我的情况下,在数据导入过程中在该列中输入了空格,尽管它看起来像一个空列,其长度为1。所以首先我使用length(column)检查了空列的长度,然后基于此我们可以编写搜索查询

  

SELECT * FROM TABLE WHERE LENGHT(COLUMN)=空列的长度   列

答案 16 :(得分:0)

获取具有NULL,0,'',``',''

的行
    SELECT * FROM table WHERE some_col IS NOT TRUE;

获取不带NULL,0,'',``,''

的行
    SELECT * FROM table WHERE some_col IS TRUE;

答案 17 :(得分:-1)

如果数据类型为字符串且行为空

,请尝试此操作
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

如果数据类型为int或column为0,则尝试此

SELECT * FROM table WHERE column_name > = 0

答案 18 :(得分:-2)

SELECT column_name FROM table_name WHERE column_name IN (NULL, '')