我有這樣的表,其中NULL是NULL
值,而不是字符串NULL:甲骨文NVL與空字符串
MYCOL
--------
NULL
example
爲什麼這個查詢不返回NULL
行?
select * from example_so where nvl(mycol, '') = '';
我有這樣的表,其中NULL是NULL
值,而不是字符串NULL:甲骨文NVL與空字符串
MYCOL
--------
NULL
example
爲什麼這個查詢不返回NULL
行?
select * from example_so where nvl(mycol, '') = '';
''
又是Oracle NULL
,因爲Oracle不支持空字符串就像其他高級語言或數據庫管理系統..
你需要使用IS NULL
或IS NOT NULL
沒有其他關係運算符針對NULL
工作,儘管它在語法上有效。 SQLFiddle Demo
它必須是,
select * from example_so where mycol IS NULL
編輯:作爲每Docs
Oracle數據庫目前治療字符值與爲空的長度爲零 。但是,這在未來的 版本中可能不會繼續存在,並且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 where 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'));
爲什麼' '''是'NULL'?是不是空串? – kmkaplan 2014-10-09 09:26:19
由於Oracle中的空字符串爲NULL。在答案中看到我的演示。 – 2014-10-09 09:28:20
@kmkaplan更新回答與解釋 – 2014-10-09 09:28:26