powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Сравнение полей с учётом NULL и не только
4 сообщений из 4, страница 1 из 1
Сравнение полей с учётом NULL и не только
    #36151625
Vladimir Kiselev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл способы сравнения довольно простые, на мой взгляд, может кому интересно. Если у кого то есть более красивый способ, было бы интересно узнать.

Сравнение двух ID полей (INT NULLABLE)
Возвращает 'Y', если поля идентичны (либо по значению ID, либо оба NULL).
Главное условие это то, что значение "-1" в VALUE должно быть одинаковое и быть уникальным,
т.е. EXTID1 и EXTID2 не могут иметь значение -1 в таблице.
Код: plaintext
1.
2.
3.
4.
SELECT
  EXTID1, EXTID2,
  CASE WHEN VALUE( EXTID1, - 1  ) = VALUE( EXTID2, - 1  ) THEN 'Y' ELSE 'N' END AS EQFIELDS
  FROM TABLE

Еще потребовалось отлавливать изменение двух полей в триггере:
Поля F1 и F2 рассматриваются вместе и если хотя бы одно из них 'Y', то
суммарный флаг = 'Y', в противном случае 'N'. В триггере требовалось
отловить изменение суммарного флага . Сравнение основано на том,
что если оба флага 'N', то только в этом случае суммарный флаг = 'N'.
Дополнительное условие, F1 и F2 не могут иметь значение NULL (NOT NULL поля).
(мутно наверное объяснил, может пример поможет):
Код: plaintext
1.
2.
3.
4.
5.
6.
    REFERENCING OLD AS O
                      NEW AS N
...
   CASE WHEN LOCATE( 'NN', CONCAT(O.F1,O.F2) ) =
                    LOCATE( 'NN', CONCAT(N.F1,N.F2) ) THEN 'N' ELSE 'Y' END
...
такой способ можно применить и на бОльшем кол-ве полей.
...
Рейтинг: 0 / 0
Сравнение полей с учётом NULL и не только
    #36159191
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже есть вопрос по этой теме. Раньше везде в WHERE использовали
Код: plaintext
VALUE(field1,  0 ) = VALUE(param1,  0 )
для того чтобы в выборку попадали записи с нулловским полем при нулловом параметре. Потом переделали на
Код: plaintext
(field1 = param1) OR (field1 IS NULL AND param1 IS NULL)
Хотелось бы узнать, как использование функции VALUE() в WHERE влияет на производительность?

---------------------------------------------------------
IS NULL OR NOT IS NULL
...
Рейтинг: 0 / 0
Сравнение полей с учётом NULL и не только
    #36159438
Vladimir Kiselev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BuryCommoner,

Вариант с VALUE получается медленней, что на индексированных, что на неиндексированных полях. Смотрел в DbVisualizer. Реально - не мерял. Хотя я предполагал, что "OR" - сильней тормозить будет.
...
Рейтинг: 0 / 0
Сравнение полей с учётом NULL и не только
    #36161354
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Подозревал, что правильнее без VALUE(), но проверить всё некогда было :)

---------------------------------------------------------
IS NULL OR NOT IS NULL
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Сравнение полей с учётом NULL и не только
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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