我想编写一个SELECT语句,该语句仅使用一个测试来返回无值的列(空,空或所有空格)。
我认为这可以工作:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
但这不适用于NULL值。
我当然可以加
OR column_name IS NULL
并且可以使用,但我想使用一种测试方法。
我想编写一个SELECT语句,该语句仅使用一个测试来返回无值的列(空,空或所有空格)。
我认为这可以工作:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
但这不适用于NULL值。
我当然可以加
OR column_name IS NULL
并且可以使用,但我想使用一种测试方法。
Answers:
在功能上,您应该可以使用
SELECT column_name
FROM table_name
WHERE TRIM(column_name) IS NULL
那里的问题是将不会使用COLUMN_NAME上的索引。如果这是一个选择性条件,则需要在TRIM(column_name)上具有基于函数的索引。
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
ISNULL(column_name, '')
如果column_name为NULL,将返回”,否则将返回column_name。
更新
在Oracle中,您可以使用NVL
获得相同的结果。
SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
NULLIF函数会将只有空格的任何列值转换为NULL值。适用于T-SQL和SQL Server 2008及更高版本。
SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
在检查null or Empty
列的值时,我注意到各种数据库中都存在一些支持方面的问题。
每个数据库都不支持 TRIM
方法。
以下是仅用于了解不同数据库支持的方法的矩阵。
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。最常见的模式是空格。在不同的数据库中,此函数的调用方式不同:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
TRIM(), RTRIM(), LTRIM()
如何检查空/空/空白:-
以下是根据不同数据库的两种不同方式-
这些修剪函数的语法为:
使用修剪检查-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
使用LTRIM和RTRIM进行检查-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方式都可以提供相同的结果,只是基于您的数据库支持而使用。如果它为空,则只返回FirstName
fromUserDetails
表LastName
希望这也会对其他人有所帮助:)
使用下面的查询,它的工作原理
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
每个建议在Oracle中运行查询以查找其特定字段仅是空白(不包括(空)或任何其他字段而仅是空白行)的记录的建议均无效。我尝试了每个建议的代码。猜猜我将继续在线搜索。
*****更新*****
我尝试了一下,它成功了,不知道为什么<1但由于<2的原因,它为什么不起作用,只返回字段为空的记录
从[tableName]中选择[columnName],其中LENGTH(columnName)<2;
我猜测用于转换数据的任何脚本即使在显示为空白的情况下仍在字段中留下了一些东西,这仍然是我猜测为什么<2有效但不是<1的原因
但是,如果该列字段中的任何其他值小于两个字符,则可能必须提出另一种解决方案。如果没有太多其他字符,则可以将其选中。
希望我的解决方案有一天能帮助别人。