我在表中有一列可能包含null或空值.如何在表中存在的行中检查列是空还是空.
(e.g. null or '' or ' ' or ' ' and ...)
Run Code Online (Sandbox Code Playgroud)
mač*_*ček 409
这将选择所有行some_col
是NULL
或''
(空字符串)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
Run Code Online (Sandbox Code Playgroud)
one*_*hen 127
根据SQL-92标准的定义,当比较两个不同宽度的字符串时,较窄的值用空格右边填充,使其宽度与宽值相同.因此,所有完全由空格(包括零空格)组成的字符串值将被视为相等,例如
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Run Code Online (Sandbox Code Playgroud)
因此,无论构成该some_col
值的空间有多少,这都应该有效:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
Run Code Online (Sandbox Code Playgroud)
或者更简洁:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
Run Code Online (Sandbox Code Playgroud)
And*_*mar 60
写条件的简短方法:
WHERE some_col > ''
Run Code Online (Sandbox Code Playgroud)
自null > ''
生成以来unknown
,这具有过滤掉null
空字符串和空字符串的效果.
Cod*_*ian 15
您可以测试一个列是否为空或使用不为空WHERE col IS NULL
或WHERE col IS NOT NULL
如
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您有各种各样的白色空间排列.您可以使用剥离空格,TRIM
并且可以使用COALESCE
默认值NULL(COALESCE将从您提供的值返回第一个非空值.
例如
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Run Code Online (Sandbox Code Playgroud)
此最终查询将返回行为MyCol
null或任何长度的空格.
如果你可以避免它,最好不要在WHERE子句中的列上有一个函数,因为它很难使用索引.如果您只想检查列是空还是空,那么最好这样做:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅TRIM COALESCE和IS NULL.
Pod*_*.io 13
没有WHERE的另一种方法,试试这个..
将同时选择Empty和NULL值
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Run Code Online (Sandbox Code Playgroud)
要么
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
Run Code Online (Sandbox Code Playgroud)
要么
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Run Code Online (Sandbox Code Playgroud)
尝试
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
Run Code Online (Sandbox Code Playgroud)
要么
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Run Code Online (Sandbox Code Playgroud)
小智 6
我讨厌数据库中的杂乱字段.如果列可能是空字符串或null,我宁愿在每次执行select之前修复它,如下所示:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Run Code Online (Sandbox Code Playgroud)
这样可以保持数据整洁,只要您不需要因某种原因明确区分NULL和空.
这条语句对我来说更清晰、更易读:
select * from my_table where ISNULL(NULLIF(some_col, ''));
Run Code Online (Sandbox Code Playgroud)
我的两分钱。
在 MySQL 中,您可以使用以下COALESCE
函数:
返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。
所以你可以像这样简化你的查询:
SELECT * FROM table WHERE COALESCE(some_col, '') = '';
Run Code Online (Sandbox Code Playgroud)
在检查null or Empty
项目中某列的值时,我注意到各种数据库中存在一些支持问题。
每个数据库都不支持TRIM
方法。
下面的矩阵只是为了了解不同数据库支持的方法。
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。最常见的被删除的模式是空格。该函数在不同的数据库中调用方式不同:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
如何检查空/空:-
根据不同的数据库,有两种不同的方式:
这些修剪函数的语法是:
使用 Trim 来检查-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
使用 LTRIM 和 RTRIM 来检查-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方式提供相同的结果,只需根据您的数据库支持使用即可。如果它有空,它只返回FirstName
from表UserDetails
LastName
希望这会对您有所帮助:)
归档时间: |
|
查看次数: |
627637 次 |
最近记录: |