Answers:
这将选择some_col
is NULL
或''
(空字符串)的所有行
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(在字符串中插入一个空格),则它在MySQL和Oracle上均适用,请参见“ onedaywhen”的答案。some_col = ''
在Oracle上不起作用,因为空字符串表示NULL。
' '
,那么它将无法在SQLite中使用。它仅处理相同/直接的字符串匹配。
根据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 IS NULL OR some_col = ' '
(在字符串中插入一个空格),然后它就可以在MySQL和Oracle上使用。some_col = ''
在Oracle上不起作用,因为空字符串在那里表示NULL,并且完整条件变为NULL。
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
并SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
在MySQL中为我工作。希望这会有用。
'' = ' '
工作在SQLServer的但不是在SQLite的,据我所知,从现在开始测试它。
编写条件的较短方法:
WHERE some_col > ''
由于null > ''
产生了unknown
,这具有过滤掉null
空字符串的作用。
coalesce(some_col, '') = ''
您可以使用WHERE col IS NULL
或WHERE col IS NOT NULL
例如测试列是否为空或不为空
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
在您的示例中,您有各种空白排列。您可以使用去除空格,TRIM
并且可以使用COALESCE
默认值NULL(COALESCE将从您提供的值中返回第一个非空值。
例如
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
此最终查询将返回MyCol
null或空白的任意长度的行。
如果可以避免,最好不要在WHERE子句中的列上使用函数,因为这样会使使用索引变得困难。如果只想检查一列是否为空或为空,则最好这样做:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
)
,=
符号前缺少a
没有WHERE的另一种方法,请尝试此。
将同时选择Empty和NULL值
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
我讨厌数据库中的混乱字段。如果该列可能是空白字符串或null,那么我宁愿在每次进行选择之前修复此问题,如下所示:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
只要您出于某种原因特别不需要在NULL和空之间进行区分,就可以使数据保持整洁。
在检查null or Empty
项目中某列的值时,我注意到各种数据库中都存在一些支持方面的问题。
每个数据库都不支持 TRIM
方法。
以下是仅用于了解不同数据库支持的方法的矩阵。
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。最常见的模式是空格。在不同的数据库中,此函数的调用方式不同:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
如何检查空/空:-
以下是根据不同数据库的两种不同方式-
这些修剪函数的语法为:
使用修剪检查-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
使用LTRIM和RTRIM进行检查-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方式都可以提供相同的结果,只是基于您的数据库支持而使用。它只是返回FirstName
UserDetails
如果它为空 from 表LastName
希望这对您有帮助:)
你也可以
SELECT * FROM table WHERE column_name LIKE ''
反之
SELECT * FROM table WHERE column_name NOT LIKE ''
select NULL like ''
返回NULL
-至少在MySQL中。
检查是否为空
$column is null
isnull($column)
检查是否为空
$column != ""
但是,您应该始终为列设置NOT NULL,
mysql优化只能处理一个IS NULL级别
NULL
价值观是另一个需要讨论的话题。我认为不提供您的理由就不建议这样做。
-1
和的非标准“ null”值''
。
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
和LTRIM
,但不TRIM
?
如果数据类型为字符串,行为空,请尝试此操作
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
如果数据类型为int或column为0,则尝试此操作
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
如果mycolumn为null,则返回1。