Всем привет!
Да уж, давно не писал в блог, начну сейчас исправляться! Сначала отпуск был продолжительный, а потом еще и заболел, все это отодвигало публикацию новых статей.
В этой статье я хочу написать про функцию sql, которая доступна только в СУБД Oracle. Функция называется «DECODE», представляющая собой упрощенный вариант выражения «CASE WHEN»:
DECODE (<Контрольное значение>, <Значение1>, <Значение2>, <Значение3>, <Значение4>…<Дефолтное значение>)
Здесь, «Контрольное значение» — это значение, которое проверяется.
Т.е. это эквивалентно этому:
CASE <контрольное значение> WHEN <значение1> THEN <значение2> WHEN <значение3> THEN <значение4> ... ELSE <последнее значение> END
Задача программиста — правильно соотнести пары значений после первоначальной переменной, т.е. «<Контрольного значения>».
Приведу очень примитивный пример:
SELECT decode ('Вова1' , '8', 'Вова' , 'Вова', 'Вова4' , 'Дима') FROM dual
Что вернет этот запрос!? А он вернет ответ «Дима», а без значения «Дима», вернет NULL. Т.к. здесь значение «Дима» — это дефолтное и есть значение, т.е. которое возвращается по умолчанию.
Хотел сделать одно замечание — эта функция достаточно сложна для понимания и её использование может привести к ошибкам в запросах, поэтому лучше использовать другие похожие функции — Nvl и Coalesce. Чаще всего именно с помощью них можно решить нужные задачи в обработке null-значений без помощи функции Decode.
Если что-то будет непонятно, пишите в комментариях, всегда попробую помочь
Update — Спасибо всем, кто нашел ошибку в тексте данной статьи, невнимательно некоторые вещи написал, поздно было, спал видимо
Удачи!