DECODE ФУНКЦИЯ

Узнайте, как использовать Oracle / PLSQL функцию DECODE с синтаксисом и примерами.

Описание

Функция Oracle / PLSQL DECODE имеет функциональные возможности оператора IF-THEN-ELSE.

Синтаксис

Синтаксис функции Oracle / PLSQL DECODE:

DECODE( expression , search , result [, search , result]… [, default] )

Параметры или аргументы

expression выражение для сравнения.
search значение, которое сравнивается с expression.
result значение, возвращаемое, если выражение expression совпало с искомым search.
default является необязательным. Если совпадений не найдено, функция DECODE вернет значение по умолчанию. Если значение по умолчанию не указано, то функция DECODE вернет NULL (если соответствий не найдено).

Применение

Функцию DECODE можно использовать в следующих версиях Oracle / PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Пример

Вы можете использовать функцию DECODE в SQL запросе следующим образом:

Запрос с использованием DECODE эквивалентен конструкции IF-THEN-ELSE.

Функция DECODE будет сравнивать каждое значение supplier_id, одно за другим.

Часто задаваемые вопросы

Вопрос:

Один из наших читателей хотел узнать, как использовать функцию DECODE чтобы сравнить две даты (то есть: date1 и date2), где date1 > date2, функция DECODE должны вернуться date2. В противном случае, функция DECODE должна вернуть date1.

Ответ:

Для этого, используйте функцию DECODE следующим образом:

DECODE((date1 – date2) – ABS(date1 – date2), 0, date2, date1)

Приведенная ниже формула будет равна 0, если date1 больше date2:

(date1 – date2) – ABS(date1 – date2)

Полезный совет № 1:

Один из наших читателей предложил объединить функцию SIGN с функцией DECODE следующим образом:

Пример с датами выше, может быть модифицированы следующим образом:

DECODE(SIGN(date1-date2), 1, date2, date1)

Сочетание SIGN / DECODE также полезно для цифровых сравнений например продажа бонусов.

DECODE(SIGN(actual-target), -1, ‘Нет бонусов для тебя’, 0,’Просто сделай это’, 1, ‘Поздравляю, вы победитель’)

Полезный совет № 2:

Один из наших читателей предложил использовать функцию LEAST (вместо функции DECODE) следующим образом:

Пример с датами выше, может быть модифицированы следующим образом:

LEAST(date1, date2)

Вопрос:

Я хотел бы знать, если это возможно, чтобы использовать функцию DECODE для диапазонов чисел, то есть 1-10 = ‘категория 1′, 11-20 = ‘категорию 2′, вместо того, чтобы индивидуально декодировать каждый номер.

Ответ:

К сожалению, вы не можете использовать функцию DECODE для диапазонов чисел. Однако, вы можете попробовать создать формулу, которая будет определять один номер для одного диапазона, и другой номер для другого диапазона, и так далее.

Например:

Этот пример, на основе формулы:

TRUNC ((supplier_id – 1) / 10

Формула будет оценивать 0, если supplier_id находится между 1 и 10.
Формула будет оценивать в 1, если supplier_id между 11 и 20.
Формула будет оценивать по 2, если supplier_id между 21 и 30.

Вопрос:

Мне нужно написать запрос DECODE, который будет возвращать следующие:

Если yrs_of_service <1, то вернуть 0,04 Если yrs_of_service> = 1 и <5, то вернуть 0,04 Если yrs_of_service> 5 затем вернуть 0,06

Как я могу это сделать?

Ответ:

Вам нужно будет создать формулу, которая расчитает единичное число для каждого из вашего диапазона.

Например:

Вопрос:

Есть ли ограничение на количество аргументов, которые вы можете указать в одном операторе DECODE? Я получаю сообщение об ошибке “ORA-00939: слишком много аргументов для функции”.

Ответ:

Да, максимальное количество компонентов, которые вы можете иметь в функции DECODE 255. Это включая expression, search и result аргументы.

Смотри также в категории: Дополнительные функции Oracle / PLSQL