powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / cmp NULL
4 сообщений из 4, страница 1 из 1
cmp NULL
    #33234202
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем NULL - UNDEFINED.


...при сравнении NULL с любым значением, даже с другим NULL,
результатом будет не TRUE или FALSE, а UNKNOWN.

Таким образом:
Код: plaintext
1.
НЕЧТО_ОПРЕДЕЛЕННОЕ оператор_сравнения NULL(UNKNOWN) -> UNKNOWN
4 example:
1!=NULL -> UNKNOWN

...Команда, следующая за ключевым словом if и относящимся к нему
условием, выполняется при соблюдении условия (когда логическое
выражение возвращает значение TRUE).

Код: plaintext
1.
2.
if( 1 !=null)
  print "l!=null"
имеем ;)

l!=null

хотя, по логике, 1!=NULL -> UNKNOWN, и if(UNKNOWN) не должен был выполниться.

Усложняем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create procedure TestNULL
as
begin
  create table #TestNULLTable(
    ID1 integer,
    ID2 integer null)

  insert into #TestNULLTable (ID1, ID2) values ( 1 , 1 )
  insert into #TestNULLTable (ID1, ID2) values ( 2 , 2 )
  insert into #TestNULLTable (ID1) values ( 3 )

  delete from #TestNULLTable where ID2!= 2 

  select * from #TestNULLTable
end
имеем ;)
Код: plaintext
1.
2.
2       2
3       NULL
здесь все по честному (3-я запись): ID2 (NULL) != 2 -> UNKNOWN, под where не
попадает и поэтому не удаляется. Хотя, по аналогии с if, д.б. удалиться.

Так где же правда?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
cmp NULL
    #33234793
Andre_Linoge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... Субейс понимает "!=" ?
по идее там "<>" ...
...
Рейтинг: 0 / 0
cmp NULL
    #33234866
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Код: plaintext
1.
2.
if( 1 !=null)
  print "l!=null"
имеем ;)
l!=null

Так где же правда?

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

вот такое в ASA 9
Код: plaintext
1.
2.
3.
4.
5.
6.
begin
    if ( 1  != null) then
       print 'aaa';
    else
       print 'bbb';
    end if;
end;
напишет в окне сервера bbb .

А результат вот таких команд на том же ASA9:
Код: plaintext
1.
2.
select (if  1  !=  2  then 'true' else 'false' endif) as aaa;
select (if  1  !=  1  then 'true' else 'false' endif) as aaa;
select (if  1  != null then 'true' else 'false' endif) as aaa;
выдаст соотвественно 'true', 'false' и null.

А еще очень полезно будет почитать про ключик базы данных ANSINULL который соотвественно включает или выключает троичную логику.


PS 4 Andre_Linoge: а ты про какой "Субейс" спрашиваешь? Сама фирма Sybase скорее всего понимает что такое != :)
Для ASA операторы != и <> абсолютно равнозначны, можно использовать любой из них без ограничений. Даже в одном выражении.
...
Рейтинг: 0 / 0
cmp NULL
    #33235058
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПравда в том, что вот этот код написан на неизвестном науке диалекте
I'm so sorry... :(
select @@versionAdaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003
Код: plaintext
1.
2.
if( 1 !=null)
  print "1!=null"
проверялась в SQL Advantage ver. 12.5.0.1 и выдает, как уже было сказано:
SQL Advantage ver. 12.5.0.1
1!=null

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / cmp NULL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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