如何检查一个单一的testing空/空/空白值?
我想编写一个只使用一个testing的SELECT语句来返回没有值的列(空,空或全部空格)。
我认为这将工作:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
但是这对NULL值不起作用。
当然我可以补充
OR column_name IS NULL
它会工作,但我想要一种方式,使用一个单一的testing。
function上,你应该可以使用
SELECT column_name FROM table_name WHERE TRIM(column_name) IS NULL
问题在于COLUMN_NAME上的索引不会被使用。 如果这是一个select性条件,则需要在TRIM(column_name)上具有基于function的索引。
SELECT column_name from table_name WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
如果column_name为NULL, ISNULL(column_name, '')
将返回'',否则将返回column_name。
UPDATE
在Oracle中,您可以使用NVL
来获得相同的结果。
SELECT column_name from table_name WHERE RTRIM(NVL(column_name, '')) LIKE ''
当检查列的null or Empty
值null or Empty
值时,我注意到在各种数据库中有一些支持问题。
每个数据库不支持 TRIM
方法。
以下是matrix,以了解不同数据库支持的方法。
SQL中的TRIM函数用于从string中删除指定的前缀或后缀。 最常见的模式是白色空间。 这个函数在不同的数据库中调用的方式不同
- MySQL:
TRIM(), RTRIM(), LTRIM()
- Oracle:
RTRIM(), LTRIM()
- SQL Server:
TRIM(), 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
希望这会帮助其他人:)
这个phpMyAdmin查询正在返回那些不为空或空白或空格的行:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
如果你想select空/空行/只是空白只是删除NOT。
和Oracle一样,你可以在MySQL中使用NVL函数,你可以使用IFNULL(columnaName,newValue)来实现你想要的结果,就像这个例子
SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
T-SQL中用于IsNotNullOrEmptyOrWhiteSpace
是:
SELECT [column_name] FROM [table_name] WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
您可以使用
SELECT [column_name] FROM [table_name] WHERE [column_name] LIKE '% %' OR [column_name] IS NULL
NULLIF函数将任何只有空白的列值转换为NULL值。 适用于T-SQL和SQL Server 2008以上。
SELECT [column_name] FROM [table_name] WHERE NULLIF([column_name], '') IS NULL