Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сравнение с Null / 16 сообщений из 16, страница 1 из 1
20.07.2001, 13:44
    #32010034
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение с Null
Нет, я знаю, что любое сравнение на равенство с 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
20.07.2001, 13:54
    #32010037
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение с Null
Ха ха я тоже как то попался, правда я тогда уставший был
Надо так:

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

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

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

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

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

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

select 1 <> null
дает NULL, а никак не true
...
Рейтинг: 0 / 0
23.07.2001, 07:34
    #32010091
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение с Null
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
23.07.2001, 07:55
    #32010092
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение с Null
Ну не придирайтесь к примеру так буквально. Хорошо, хорошо, синтаксис неправильный, не спорю. Мне просто хотелось показать, что операция "не равно", если хотя бы один из операндов 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
23.07.2001, 08:14
    #32010094
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение с Null
2 GreenSunrise

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

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

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


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