![](/img/trans.png)
[英]Oracle nvl not able to handle empty string even after using is not null
[英]Oracle NVL with empty string
我有这个表,其中NULL是NULL
值,而不是字符串NULL:
MYCOL
--------
NULL
example
为什么这个查询不返回NULL
行?
select * from example_so where nvl(mycol, '') = '';
''
在Oracle中再次为NULL
,因为Oracle不像其他高级语言或DBMS那样支持空字符串。
您需要使用IS NULL
或IS NOT NULL
查找NULL /空字符串
没有其他关系运算符可以对NULL
起作用,尽管它在语法上是有效的。 SQLFiddle演示
它一定要是,
select * from example_so where mycol IS NULL
编辑:根据文件
Oracle数据库当前将长度为零的字符值视为null。 但是,在将来的版本中,这可能不会继续存在,Oracle建议您不要将空字符串视为与空值相同。
因为NULL = NULL
根本就不为人知。 也许是第三个国家? 它既不是TRUE
也不是FALSE
。
Oracle将EMPTY STRING视为NULL。
nvl(mycol, '')
没有任何意义,因为你将NULL恢复为NULL并再次与NULL进行比较。
SQL> WITH DATA AS(
2 SELECT 1 val, 'NULL' str FROM dual UNION ALL
3 SELECT 2, NULL str FROM dual UNION ALL
4 SELECT 3, '' str FROM dual UNION ALL
5 SELECT 4, 'some value' str FROM dual)
6 SELECT val, NVL(str, 'THIS IS NULL') FROM data WHERE str IS NULL
7 /
VAL NVL(STR,'THI
---------- ------------
2 THIS IS NULL
3 THIS IS NULL
SQL>
select * from example_so其中nvl(mycol,'')='';
nvl(mycol,'')将导致为NULL ,当您将NULL与空字符串进行比较时,它无法进行比较
create table t(id varchar2(2));
insert into t values (nvl(null,'')); <------ this will insert NULL
insert into t values (nvl(null,'et'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.