powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оператор if и null
13 сообщений из 13, страница 1 из 1
Оператор if и null
    #39643125
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В документации по FB написано, что любое сравнение, в котором один из операторов = null всегда вернёт null.

Следует ли из этого что вместо написания
Код: plsql
1.
if ((a is not null) and (b is not null) and (a = b)) then ... else ...

можно просто написать
Код: plsql
1.
if (a = b) then ... else ...


и получить тот же результат? Т.е. трактуется ли null в операторе if так же как и false ( в данном конкретном примере) ?
...
Рейтинг: 0 / 0
Оператор if и null
    #39643128
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оператор if и null
    #39643134
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

> В документации по FB написано, что любое сравнение, в котором один из операторов = null всегда вернёт null.
на самом деле операторы сравнения c NULL возвращают UNKNOWN (что представлено как NULL)

> и получить тот же результат?
да

> Т.е. трактуется ли null в операторе if так же как и false (в данном конкретном примере)?

не совсем так. Если условие в if истинно, то выполняется то что идёт после then, в противном случае, то что после else (получается при false и unknown).
...
Рейтинг: 0 / 0
Оператор if и null
    #39643175
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

А в запросах это работает? Т.е:
Код: plsql
1.
2.
select firstname, age from people
  where (age = :myage) and (age is not null);


выделенная часть влияет на логику запроса? Если, например, myage = null?
...
Рейтинг: 0 / 0
Оператор if и null
    #39643179
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

в данном случае выделенная часть абсолютно бесполезна
...
Рейтинг: 0 / 0
Оператор if и null
    #39643181
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.05.2018 12:16, alekcvp пишет:
>
> А в запросах это работает?

если ты написал:
"ЧТО_ТО" = "ЧЕМУ_ТО"
то забудь про NULL'ы
они не равны.
ничему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оператор if и null
    #39672638
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ссылка на Хабр

Код: sql
1.
2.
select firstname, age from people
where (age = :myage) or ((age is null) and (:myage is null));



вот так вот отрабатывает параметр со значением null
...
Рейтинг: 0 / 0
Оператор if и null
    #39672641
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

а ещё есть оператор IS [NOT] DISTINCT FROM
...
Рейтинг: 0 / 0
Оператор if и null
    #39672642
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkrwhere (age = :myage) or ((age is null) and (:myage is null));
не-а.
...
Рейтинг: 0 / 0
Оператор if и null
    #39672643
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

только что проверил)
...
Рейтинг: 0 / 0
Оператор if и null
    #39672645
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

null or true -- TRUE
...
Рейтинг: 0 / 0
Оператор if и null
    #39672646
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

дык. и вся фраза при age is null и myage is null превращается в true, что для исходного вопроса про age = :myage неверно.
Или я не понял, к чему написано
"вот так вот отрабатывает параметр со значением null "
Он же так не "отрабатывает".
...
Рейтинг: 0 / 0
Оператор if и null
    #39672669
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvдык. и вся фраза при age is null и myage is null превращается в true, что для исходного вопроса про age = :myage неверно.

как писал
Мимопроходящийесли ты написал:
"ЧТО_ТО" = "ЧЕМУ_ТО"
то забудь про NULL'ы
они не равны.
ничему.

т.е. в условии age = :myage (если myage = null) результат будет ни true, ни false, а null...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оператор if и null
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]