案例陈述在Oracle中没有按预期工作

WeV*_*Vie 2 sql oracle

我在数据库中有一个包含很多空/空行的字段.我正在尝试创建一个case语句,将其更改为"Empty Field"或类似的东西,以便在向用户显示时,它们将指示该行没有该列的数据但由于某种原因它不是工作.当我选择没有case语句的数据时,我会得到一个字符串或一个空字段.当我添加case语句时,{null}无论该列中的内容如何,每一行都会返回.我曾经多次使用类似的案例陈述,但这令我感到困惑.

SELECT CASE
         WHEN col_name = TRIM('') THEN 'Empty Field'
         END col_name
FROM table_name
Run Code Online (Sandbox Code Playgroud)

我也尝试LIKE代替等号NULL而不是等号TRIM('')

工作方案:

SELECT NVL(TRIM(col_name), 'Empty Field') AS col_name
FROM table_name
Run Code Online (Sandbox Code Playgroud)

cod*_*eim 5

在Oracle中,''在VARCHAR上下文中被视为NULL

你可以使用NVL(col_name,'默认值')

select NVL(col_name, 'Empty Field') from table_name
Run Code Online (Sandbox Code Playgroud)

Oracle SQL中的TRIM('')为NULL,因此无效.

SQL> set null NULL
SQL> select trim('') from dual;

T
-
N
U
L
L
Run Code Online (Sandbox Code Playgroud)

就CASE语句而言,问题在于你使用NULL等于.你不能说NULL =什么,它是假的.NULL不等于任何东西,甚至不是自己.你需要使用:

WHERE col_name IS NULL
Run Code Online (Sandbox Code Playgroud)

IS NULL和= NULL不一样.

SQL> select case when id = trim('') then 'Empty' end from nulls;

CASEW
-----
NULL

SQL> select case when id = null then 'Empty' end from nulls;

CASEW
-----
NULL

SQL> select case when id is null then 'Empty Field' end from nulls;

CASEW
-----
Empty Field      <--- DATA!
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,也许您的数据中有空格.测试通过使用SQLPLUS - SET NULL NULL命令我显示验证它是真正的NULL.