我在一个表中有一个列,它可能包含空值或空值。我如何检查一个列是否为空或空的行中存在的表?
(e.g. null or '' or ' ' or ' ' and ...)
请注意:最好把它练习在答案的最后。
你可以使用WHERE col IS NULL或WHERE col IS NOT NULL来测试一个列是否为空。
WHERE col IS NULL
WHERE col IS NOT NULL
SELECT myCol FROM MyTable WHERE MyCol IS NULL
在你的例子中,你有各种各样的空白排列。你可以使用TRIM去除空白,你可以使用COALESCE来默认一个NULL值(COALESCE将从你提供的值中返回第一个非空值。
TRIM
COALESCE
如。
SELECT myCol FROM MyTable WHERE TRIM(COALESCE(MyCol, '')) = ''
最后一个查询将返回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 != ""
这将选择所有some_col为NULL或''(空字符串)的行。
some_col
NULL
''
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 > ''
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值时,我注意到在各种数据库中有一些支持问题。
null or Empty
不是所有数据库都支持TRIM< / >强的方法。
下面是一个矩阵,只是为了了解不同数据库支持的方法。
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。最常被删除的模式是空白。这个函数在不同的数据库中调用方式不同:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
空/空检查方法:- .
下面是两种不同的方法根据不同的数据库-
这些trim函数的语法如下:
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL < / p >
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL < / p >
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方法提供相同的结果,只是基于您的数据库支持使用。如果LastName为空,则返回UserDetails表中的FirstName
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)检查了空列的长度,然后在此基础上,我们可以编写搜索查询
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;