我在一个表中有一个列,它可能包含空值或空值。我如何检查一个列是否为空或空的行中存在的表?
(e.g. null or '' or ' ' or ' ' and ...)
我在一个表中有一个列,它可能包含空值或空值。我如何检查一个列是否为空或空的行中存在的表?
(e.g. null or '' or ' ' or ' ' and ...)
当前回答
这句话对我来说更清晰更易读:
select * from my_table where ISNULL(NULLIF(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;
要么
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
在我的项目中检查一个列的空值或空值时,我注意到在各种数据库中存在一些支持问题。
不是每个数据库都支持TRIM方法。
下面是一个矩阵,只是为了了解不同数据库支持的方法。
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。最常被删除的模式是空白。这个函数在不同的数据库中调用方式不同:
MySQL:修剪(),r修剪(),LTRIM() 神谕:RTRIM(), LTRIM() SQL服务器:RTRIM(), LTRIM()
如何检查空/空:-
下面是两种不同的方法根据不同的数据库-
这些trim函数的语法如下:
使用Trim检查- SELECT FirstName FROM UserDetails WHERE TRIM(LastName)为空 使用LTRIM和RTRIM检查- SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName))为空
以上两种方法提供相同的结果,只是基于您的数据库支持使用。它只是从UserDetails表返回FirstName,如果它有一个空的LastName
希望这对你有所帮助:)
请注意:最好把它练习在答案的最后。
你可以使用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文档中的空值
在我的例子中,在数据导入期间在列中输入了空格,尽管它看起来像一个空列,但它的长度是1。所以首先我用length(column)检查了空列的长度,然后在此基础上我们可以编写搜索查询
SELECT * FROM table WHERE LENGTH(column)= 0;