powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать простую проверку: 1 != NULL ?
8 сообщений из 8, страница 1 из 1
Как сделать простую проверку: 1 != NULL ?
    #34349227
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Столкнулся с такой задачей: надо сравнивать старые и новые значения и иногда среди них встречается NULL. В этом случае проверка
Код: plaintext
SELECT OLD != NEW
не проходит, т.к. не возвращается ни TRUE, ни FALSE.

Вот пример:
Код: plaintext
SELECT  1  != NULL

Вопрос: как надо представить NULL или поменять условие, чтобы в примере
Код: plaintext
SELECT  1  != NULL
вернулось FALSE.

Спасибо.
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349234
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select  1  is null;
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349242
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попадется занчение 1 и 2.

Тогда
Код: plaintext
SELECT  1  is  2 
вернет ошибку.
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349246
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.

хотя, если добавить доп проверки, то можно сделать и через "IS".

А другие варианты есть?
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349259
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зависит от того, как вы хотите интерпретировать значение null
Код: plaintext
1.
2.
3.
select  1  is null or  1  !=  2 ;
select coalesce(null,  0 ) !=  1 ;
select coalesce(null,  1 ) !=  1 ;
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349331
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мммм, ну почти. Но что не так.

Щас поясню. Это у меня триггерная функция, которая вызывается при UPDATE записей и проверяет, если значение поля изменилось, то пишет статистику изменений.

Какой значение (OLD или NEW) будет NULL я не знаю.

Сдругой стороны: типы полей могут какие угодно и в случае использования функции coalesce(OLD, returnValOld) или coalesce(NEW, returnValNew) не известо, что возвращать в returnVal - ноль, рустую строку, булево и еще что-то.

Задача заключается только в том, чтобы узнать что значения неравны. Сделал напрямик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	IF
		(NEW.timestart IS NOT NULL AND OLD.timestart IS NULL) OR
		(NEW.timestart IS NULL AND OLD.timestart IS NOT NULL) OR
		(NEW.timestart != OLD.timestart) 
	THEN
		PERFORM write_stat_detail('timestart'::text, OLD.timestart::text, NEW.timestart::text);
	END IF;
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349376
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
if coalesce(a != b, true) then
   ...
end if;
...
Рейтинг: 0 / 0
Как сделать простую проверку: 1 != NULL ?
    #34349504
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
NOT a IS DISTINCT FROM b
но в старых (седьмых) посгрях для переменных в ф-ях была бага. А поля в таблах (и записи) сравнивались помницо нормально.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
NULL IS DISTINCT FROM   1 
,NULL IS DISTINCT FROM  NULL
, 1  IS DISTINCT FROM   2 
, 1  IS DISTINCT FROM   1 
,( 1 , 2 ) IS DISTINCT FROM  ( 1 , 2 )
,( 2 , 3 ) IS DISTINCT FROM  ( 1 , 2 )
,(Null, 3 ) IS DISTINCT FROM  ( 1 ,Null)
,(Null, 3 ) IS DISTINCT FROM  (Null, 3 );

---------------
t;f;t;f;f;t;t;f
читать
9.17. Row and Array Comparisons
9.17.5. Row-wise Comparison
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать простую проверку: 1 != NULL ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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