如何检查列中是否为空或空的MySQL
我有一个表中的列可能包含空值或空值。 如何检查表中存在的行是否为空或为空。
(eg null or '' or ' ' or ' ' and ...)
这将selectsome_col
为NULL
或''
(空string)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
正如SQL-92标准所定义的那样,当比较两个不同宽度的string时,较窄的值用空格填充以使宽度与宽度值相同。 因此,完全由空格(包括零空格)组成的所有string值将被视为相等
'' = ' ' IS TRUE '' = ' ' IS TRUE ' ' = ' ' IS TRUE ' ' = ' ' IS TRUE etc
因此,无论有多less个空间组成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
和空string的效果。
您可以使用WHERE col IS NULL
或WHERE col IS NOT NULL
来testing列是否为空或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 = ''
有关更多信息,请参阅TRIM COALESCE和IS NULL 。
还处理来自MySQL文档的空值
没有WHERE的另一种方法,试试这个..
将select空值和空值
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
我讨厌我的数据库中凌乱的字段。 如果列可能是一个空白string或null,我宁愿在每次做select之前解决这个问题,就像这样:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn=''; SELECT * FROM MyTable WHERE MyColumn IS NULL
这样可以保持数据整洁,只要你没有特别的需要区分NULL和空的出于某种原因。
尝试
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL -> 0, 0, 1
要么
SELECT ISNULL(' ') , ISNULL( NULL ) -> 0 ,1
参考
如果要在执行ORDER BY时最后显示NULL值,请尝试以下操作:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
这个说法对我来说更清晰,更易读:
select * from my_table where ISNULL(NULLIF(some_col, ''));
当在我的项目中检查列的null or Empty
值null or Empty
值时,我注意到在各种数据库中有一些支持问题。
每个数据库不支持 TRIM
方法。
以下是matrix,以了解不同数据库支持的方法。
SQL中的TRIM函数用于从string中删除指定的前缀或后缀。 最常见的模式是白色空间。 这个函数在不同的数据库中调用的方式不同
- MySQL:
TRIM(), RTRIM(), LTRIM()
- Oracle:
RTRIM(), LTRIM()
- SQL Server:
RTRIM(), LTRIM()
如何检查空/空: –
以下是根据不同数据库的两种不同的方式 –
这些修剪function的语法是:
-
使用修剪来检查 –
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
-
使用LTRIM&RTRIM进行检查,
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方式提供相同的结果只是基于您的数据库支持使用。 它只是从UserDetails
表返回FirstName
,如果它有一个空的LastName
希望这会帮助你:)
检查null
$column is null isnull($column)
检查空的
$column != ""
但是,您应该始终为列设置NOT NULL,
mysql优化只能处理一个IS 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 column_name FROM table_name WHERE column_name IN (NULL, '')
你也可以做
SELECT * FROM table WHERE column_name LIKE ''
反过来
SELECT * FROM table WHERE column_name NOT LIKE ''
如果数据types是string而行是空的,试试这个
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
如果数据types是int或列是0,那么试试这个
SELECT * FROM table WHERE column_name > = 0