Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Что-то не пойму с NULL  [new]
alexFV
Member

Откуда:
Сообщений: 331
IF (null = null)
	?"ДА"
ELSE
	?"НЕТ"
ENDIF 
Выводится "НЕТ", если это впринципе понятно, то почему тогда вывидся "НЕТ" в обратном случае:
IF (null <> null)
	?"ДА"
ELSE
	?"НЕТ"
ENDIF 
6 сен 06, 11:25    [3098227]     Ответить | Цитировать Сообщить модератору
 Re: Что-то не пойму с NULL  [new]
проходящий
Guest
Не надо так сравнивать! Null ничему не равен! Там неизвестно что! Можно только определить наличие или отсутствие Null. IsNull()
6 сен 06, 11:30    [3098271]     Ответить | Цитировать Сообщить модератору
 Re: Что-то не пойму с NULL  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
alexFV
IF (null = null)
	?"ДА"
ELSE
	?"НЕТ"
ENDIF 
Выводится "НЕТ", если это впринципе понятно, то почему тогда вывидся "НЕТ" в обратном случае:
IF (null <> null)
	?"ДА"
ELSE
	?"НЕТ"
ENDIF 


См хелп Behavior of Null Values in Logical Expressions
6 сен 06, 11:58    [3098493]     Ответить | Цитировать Сообщить модератору
 Re: Что-то не пойму с NULL  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
все логично
расшифровывая твой IF
получаем
IF (условие) = .T.

null = null равно NULL
null = null тоже равно NULL

NULL неравен .T.
поэтому всегда работает else- ветка
6 сен 06, 13:05    [3099116]     Ответить | Цитировать Сообщить модератору
 Re: Что-то не пойму с NULL  [new]
Недоходящий
Member

Откуда:
Сообщений: 912
2 alexFV

лучше как сказал проходящий

IF isnull(переменная)
?"ДА"
ELSE
?"НЕТ"
ENDIF
6 сен 06, 13:26    [3099251]     Ответить | Цитировать Сообщить модератору
 Re: Что-то не пойму с NULL  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
NULL - это неизвестно какое значение. Не пустое, а именно "неизвестное".

Если сравнить неизвестное значение с другим неизвестным значением, то и получишь неизвестно что, вне зависимости от того, как именно сравнивал. На равно или не равно.

То, что лежит в правом ящике равно тому что лежит в левом ящике? Может быть не равно? Да откуда я знаю! Я же не знаю, ЧТО лежит в этих ящиках? На любой вопрос о сравнении последует ответ "Не знаю".

Оператор IF анализирует результат вычисления условия и проверят, равен ли этот результат "Истина" или нет. Ответ "Не знаю", очевидно не равен "Истина", поэтому переходим на команду ELSE.

Если предполагается сравнивать 2 значения, каждое из которых может иметь значение NULL, то это делается примерно так:

LOCAL lcEmptyValue
lcEmptyValue = 0
IF NVL(m.Var1,m.lcEmptyValue) = NVL(m.Var2,m.lcEmptyValue)
...
ELSE
...
ENDIF

Т.е. возможное значение NULL заменяется на корректное пустое значение. В данном случае я предполагал, что речь идет о числовых значениях, поэтому в качестве "пустого" значения выбрал 0.
6 сен 06, 14:05    [3099539]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить