我在表中有一列可能包含null或空值。如何在表中存在的行中检查列是空还是空。
(e.g. null or '' or ' ' or ' ' and ...)
答案 0 :(得分:375)
这将选择some_col
为NULL
或''
(空字符串)的所有行
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 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文档的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
答案 8 :(得分:3)
在检查项目中某列的null or Empty
值时,我注意到各种数据库中存在一些支持问题。
每个数据库都不支持 TRIM
方法。< / em>的
以下是了解不同数据库支持的方法的矩阵。
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。被删除的最常见模式是白色空间。在不同的数据库中以不同方式调用此函数:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
如何检查空/空: -
以下是根据不同数据库的两种不同方式 -
这些修剪函数的语法是:
使用Trim检查 -
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
使用LTRIM&amp; RTRIM检查 -
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方式都提供相同的结果,只需根据您的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, '')