Joh*_*don 74 sql oracle oracle10g
我想编写一个SELECT语句,它只使用一个测试来返回没有值的列(null,empty或所有空格).
我认为这会奏效:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
Run Code Online (Sandbox Code Playgroud)
但这对NULL值不起作用.
我当然可以补充一下
OR column_name IS NULL
Run Code Online (Sandbox Code Playgroud)
它会起作用,但我想要一种使用单一测试的方法.
Jus*_*ave 86
在功能上,你应该可以使用
SELECT column_name
FROM table_name
WHERE TRIM(column_name) IS NULL
Run Code Online (Sandbox Code Playgroud)
问题是不会使用COLUMN_NAME上的索引.如果是选择条件,则需要在TRIM(column_name)上具有基于函数的索引.
Mer*_*iew 18
NULLIF 函数会将任何只有空格的列值转换为 NULL 值。适用于 T-SQL 和 SQL Server 2008 及更高版本。
SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
Run Code Online (Sandbox Code Playgroud)
Gen*_*ari 17
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
Run Code Online (Sandbox Code Playgroud)
ISNULL(column_name, '') 如果column_name为NULL,则返回'',否则返回column_name.
UPDATE
在Oracle中,您可以使用NVL来实现相同的结果.
SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''
Run Code Online (Sandbox Code Playgroud)
在检查null or Empty列的值时,我注意到各种数据库中存在一些支持问题.
每个数据库都不支持 TRIM 方法.
下面是了解不同数据库支持的方法的矩阵.
SQL中的TRIM函数用于从字符串中删除指定的前缀或后缀.被删除的最常见模式是白色空间.在不同的数据库中以不同方式调用此函数
TRIM(), RTRIM(), LTRIM()RTRIM(), LTRIM()TRIM(), RTRIM(), LTRIM()如何检查空/空/空格: -
以下是根据不同数据库的两种不同方式 -
这些修剪函数的语法是:
使用Trim检查 -
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
使用LTRIM和RTRIM检查 -
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
以上两种方式都可以根据您的DataBase支持提供相同的结果.如果它是空的,它只返回FirstNamefrom UserDetails表LastName
希望这也会帮助别人:)
小智 6
此 phpMyAdmin 查询返回那些不为空或空或只是空格的行:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
Run Code Online (Sandbox Code Playgroud)
如果你想选择空/空/只有空格的行,只需删除 NOT 即可。