如何检查列中是否为空或空的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