powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сравнение с Null
16 сообщений из 16, страница 1 из 1
Сравнение с Null
    #32010034
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
Нет, я знаю, что любое сравнение на равенство с Null, даже Null=Null - ложно. НО! НЕ равенство ложно тоже! Может быть, для кого-то это не является открытием. Я только что обнаружил и упал в обморок. Привожу примеры, которые можете прокрутить в QA - возможно, некоторые из вас, как я, поспешат исправлять тексты триггеров и хранимых процедур. Итак.
if 1=Null
print 'Истина'
else
print 'Ложь'
Результат: Ложь (пока все нормально)

if not (1=Null)
print 'Истина'
else
print 'Ложь'
Результат: Ложь (!!!)

if 1!=Null
print 'Истина'
else
print 'Ложь'
Результат: Ложь ()

if not (1!=Null)
print 'Истина'
else
print 'Ложь'
Результат: Ложь ( )

Могу поклясться, что хотя бы один читатель данного форума тоже упал в обморок и в таком состоянии полез в свой код исправлять ошибки в логике.
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010037
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ха ха я тоже как то попался, правда я тогда уставший был
Надо так:

if 1 is Null
print 'Истина'
else
print 'Ложь'
Результат: Ложь (пока все нормально)
if 1 is not Null)
print 'Истина'
else
print 'Ложь'
Результат: Ложь (!!!)

Ну и так далее.
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010040
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
А я попался на другой ситуации. Есть переменная типа Bit. Она может принимать всего три значения: 0, 1 и Null. Когда она равна 1, логика программы одна, когда 0 или Null - другая. Я и пишу в лоб:
if @SomeBit!=1
...
или так:
if not (@SomeBit=1)
...
И получаю, что когда @SomeBit равен Null, то Null=1! Можно просто в осадок выпасть!
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010041
Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это всё старо как мир, ISNULL вам поможет.
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010046
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня всё нормально...

if 1 is Null
print 'Истина'
else
print 'Ложь'
Результат: Ложь

if 1 is not Null
print 'Истина'
else
print 'Ложь'
Результат: Истина
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010049
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы даете, ребята! В любой книжке, хелпе и т.д. громадными буквами в самом начале пишется - любая операция с участием операнда со значением NULL дает NULL. Любая! Сравнение равно/не равно, арифметические функции и т.д. - все даст NULL.
%-))))))
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010064
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Любая! Сравнение равно/не равно, арифметические функции и т.д. - все даст NULL.

Да ладно Вам в самом деле а если не равно возвращается true а уж никак не null.
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010066
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya

Да не надо выпадать в осадок мне прям весело, сорри
на этом сайте даже статья есть на тему трехзначной логики, все достаточно ясно
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010087
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady:

select 1 <> null
дает NULL, а никак не true
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010091
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 GreenSunrise

select 1 <> null вернет

"Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '<'."


True вернется на неравнество в том случае, если я сравниваю нечто (например значение переменной) с Null и при этом хочу выяснить не является ли значение переменной Null.
В общем то я неправ, потому что спутал операции. Сорри, в оправдание вот ссылка, по которой можно прочесть статью на эту тему.
http://www.akzhan.midi.ru/devcorner/articles/DDP-Representation-of-an-absent-information-rus.html
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010092
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не придирайтесь к примеру так буквально. Хорошо, хорошо, синтаксис неправильный, не спорю. Мне просто хотелось показать, что операция "не равно", если хотя бы один из операндов NULL, возвращает NULL. Вот более рабочий пример


declare @i int
set @i = 1
if @i <> 1
print 'not equal'
else
print 'equal'

Напечатает, ясный пень, equal.
Если в этом примере закомментарить строчку set @i = 1 или заменить ее на set @i = null для бОльшей наглядности, то на печать выведется опять-таки equal.
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010094
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 GreenSunrise

Ну ладно, ладно сглупил я

Немного неправильно понял Ваше утверждение, мне почему то показалось что Вы утверждаете что невозможно определить является ли значение Null-ом
Перегрелся наверное
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010133
ChA+
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то сравнение с NULL дает значение UNKNOWN, если верить BOL,
а это, ясен пень, не True и не False
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010452
George
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то NULL=NULL может быть true, если установлено Set ANSI_NULLS off
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010453
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ты! И правда...
Век живи, век учись, дураком помрешь
...
Рейтинг: 0 / 0
Сравнение с Null
    #32010558
Vladimir Gomounov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Истину сказал George

Я это применяю повсеместно.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сравнение с Null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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