如何通过单个测试检查null / empty / whitespace值?

时间:2010-11-05 19:43:38

标签: sql oracle oracle10g

我想写一个SELECT语句,它只使用一个测试来返回没有值的列(null,empty或all spaces)。

我认为这样可行:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';

但这对NULL值不起作用。

当然我可以添加

OR column_name IS NULL

它会起作用,但我想要一种使用单一测试的方法。

10 个答案:

答案 0 :(得分:78)

从功能上讲,您应该可以使用

SELECT column_name
  FROM table_name
 WHERE TRIM(column_name) IS NULL

问题是不会使用COLUMN_NAME上的索引。如果这是一个选择性条件,你需要在TRIM(column_name)上有一个基于函数的索引。

答案 1 :(得分:16)

SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
如果column_name为NULL,

ISNULL(column_name, '')将返回'',否则返回column_name。

更新

在Oracle中,您可以使用NVL来获得相同的结果。

SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''

答案 2 :(得分:5)

在检查列的null or Empty值时,我注意到各种数据库中存在一些支持问题。

每个数据库都不支持 TRIM 方法。< / em>的

以下是了解不同数据库支持的方法的矩阵。

SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀。被删除的最常见模式是白色空间。在不同的数据库中以不同方式调用此函数:

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracle: RTRIM(), LTRIM()
  • SQL Server: TRIM(), RTRIM(), LTRIM()

如何检查空/空/空格: -

  

以下是根据不同数据库的两种不同方式 -

这些修剪函数的语法是:

  1. 使用Trim检查 -

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. 使用LTRIM&amp; RTRIM检查 -

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

  3. 以上两种方式都提供相同的结果,只需根据您的DataBase支持使用。它只是从FirstName表中返回UserDetails,如果它有空LastName

    希望这也有助于其他人:)

答案 3 :(得分:4)

NULLIF函数会将只有空格的任何列值转换为NULL值。适用于T-SQL和SQL Server 2008&amp;起来。

SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL

答案 4 :(得分:2)

这个phpMyAdmin查询返回那些非null或空或只是空格的行:

SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))

如果你想选择空/空的行/只是空格,只需删除NOT。

答案 5 :(得分:1)

使用下面的查询即可使用

SELECT column_name FROM table_name where isnull(column_name,'') <> ''

答案 6 :(得分:0)

每个人建议在Oracle中运行查询以查找其特定字段为空白(不包括(空)或任何其他字段为空白行)的记录都行不通。我尝试了每个建议的代码。猜猜我会继续在线搜索。

***** UPDATE *****

我尝试了一下,它就起作用了,不知道为什么<1却不起作用,但由于某些原因<2起作用,并且只返回字段为空的记录

从[tableName]中选择[columnName],其中LENGTH(columnName)<2;

我想用来转换数据的脚本即使在显示为空白的情况下仍在字段中留下了一些东西,这仍然是我猜为什么<2有效但<1

不起作用的原因

但是,如果该列字段中的任何其他值小于两个字符,则可能需要提出另一种解决方案。如果没有太多其他字符,则可以将其选中。

希望我的解决方案有一天能帮助别人。

答案 7 :(得分:-2)

我在T-SQL中用于IsNotNullOrEmptyOrWhiteSpace的是:

SELECT [column_name] FROM [table_name]
WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0

答案 8 :(得分:-3)

在Oracle中你可以使用MySQL中的NVL函数,你可以使用IFNULL(columnaName,newValue)来实现你想要的结果,如本例所示

SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';

答案 9 :(得分:-5)

你可以使用

SELECT [column_name] 
FROM [table_name]
WHERE [column_name] LIKE '% %' 
OR [column_name] IS NULL