Mam tej tabeli gdzie null jest wartość NULL
, nie łańcuchem pustym:Oracle NVL z pustym ciągiem
MYCOL
--------
NULL
example
Dlaczego ta kwerenda nie zwrócić NULL
wiersz?
select * from example_so where nvl(mycol, '') = '';
Mam tej tabeli gdzie null jest wartość NULL
, nie łańcuchem pustym:Oracle NVL z pustym ciągiem
MYCOL
--------
NULL
example
Dlaczego ta kwerenda nie zwrócić NULL
wiersz?
select * from example_so where nvl(mycol, '') = '';
''
znów NULL
w Oracle, ponieważ Oracle nie obsługuje pustych ciągów podobnie jak inne języki wysokiego poziomu lub DBMS ..
trzeba spojrzeć na NULL/pusty ciąg używając IS NULL
lub IS NOT NULL
Żaden inny operator relacyjny nie działa przeciwko NULL
, ale jest poprawny pod względem składniowym. SQLFiddle Demo
To musi być
select * from example_so where mycol IS NULL
EDIT: Zgodnie Docs
Oracle Database obecnie traktuje wartość znaków o długości zero za nieważną. Jednak może to nie być prawdą w przyszłych wersjach , a firma Oracle zaleca, aby nie traktować pustych ciągów takich samych, jak wartości null.
Ponieważ NULL = NULL
jest po prostu nieznany. Może trzecie państwo? Nie jest to ani TRUE
ani FALSE
.
Oracle uważa PUSTE STRING za NULL.
nvl(mycol, '')
nie ma sensu, ponieważ przywracasz NULL z powrotem do NULL i porównujesz go ponownie z 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>
wybierz * z przyklad_so gdzie nvl (mycol, '') = '';
NVL (Mycol, '') będzie powodowało jako NULL i po porównaniu NULL z pustym ciągiem cant być porównywane
create table t(id varchar2(2));
insert into t values (nvl(null,'')); <------ this will insert NULL
insert into t values (nvl(null,'et'));
Jak to ' ''' 'NULL' jest? Czy nie jest pustym łańcuchem? – kmkaplan
Ponieważ pusty łańcuch ma wartość NULL w Oracle. Zobacz moje demo w odpowiedzi. –
@kmkaplan zaktualizowana odpowiedź z wyjaśnieniem –