繁体   English   中英

带有空字符串的Oracle NVL

[英]Oracle NVL with empty string

我有这个表,其中NULL是NULL值,而不是字符串NULL:

MYCOL
--------
NULL
example

为什么这个查询返回NULL行?

select * from example_so where nvl(mycol, '') = '';

''在Oracle中再次为NULL ,因为Oracle不像其他高级语言或DBMS那样支持空字符串。

您需要使用IS NULLIS 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM