我在数据库中有一个包含很多空/空行的字段.我正在尝试创建一个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)
在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.
| 归档时间: |
|
| 查看次数: |
5627 次 |
| 最近记录: |