Как подстрока из переменной varchar может быть нулевой? - PullRequest
4 голосов
/ 28 января 2012

Прежде всего, как пользователь SQL Server, я был удивлен, что в Oracle этот синтаксис допустим:

select var
from table
where substr(var, 2, 1) is null

Как подстрока из строковой переменной varchar может быть null? В SQL Server это никогда не будет правдой (?).

select var
from table
where substring(var, 2, 1) is null

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Во многих случаях в Oracle пустая строка фактически равна NULL .

Если вы используете substr () вне диапазона вашей строки, SQL-сервер возвращает пустую строку, а Oracle возвращает NULL (ее эквивалент пустой строке).

1 голос
/ 28 января 2012

Как правило, null означает отсутствие значения.

select  substr ('abcd',2, 1) from dual;
-- result: 'b'

select  substr ('a',2, 1) from dual;
-- empty, because there is nothing at second position on string 'a';

select decode(substr('a',2,1),null, 'yes, is null') from dual;
-- result: 'yes, is null'


select decode('', null, 'yes, is null') from dual;
-- result: 'yes, is null'

Обновление: выбор реализации понятен.В большинстве языков, например в Java, строки помещаются в область памяти, а для программиста строковые переменные являются ссылками на область в памяти.Таким образом, пустая строка является ссылкой на область длины 0, но ссылка не является нулевой.Итак, ноль - это другое (без ссылки), и я думаю, что и вы: это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...