Оператор CASE Назад В начало Вперед

Оператор CASE возвращает одно из нескольких альтернативных значений в зависимости от результата вычисления выражения. Оператор CASE может быть одного из двух форматов:

<оператор-CASE> = <переключаемый-выбор> | <условный-выбор>

<переключаемый-выбор> - возвращает альтернативу, для которой вычисляемое значение переключателя совпадает со значением выбора, соответствующим данной альтернативе.

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

<переключаемый-выбор> = CASE <выражение-переключателя>
  { WHEN <выражение-выбора> THEN <возвращаемое-значение> }
  [ ELSE <возвращаемое-значение> ]
  END

<выражение-переключателя> - выражение, результат вычисления которого используется для выбора возвращаемого значения из имеющихся альтернатив.

WHEN - открывает описание элемента выбора в списке альтернатив. Список альтернатив может содержать несколько элементов выбора.

<выражение-выбора> - если результат вычисления этого выражения совпадает со значением переключателя, то возвращается значение текущего элемента выбора. Вычисленное значение должно иметь тот же тип, что и <выражение-переключателя> или приводиться к нему неявным преобразованием типа.

THEN - разделяет <выражение-выбора> и <возвращаемое-значение> в описании элемента выбора.

<возвращаемое-значение> - результат вычисления этого выражения возвращается оператором CASE.

ELSE - задает значение, возвращаемое если ни один из элементов не был выбран.

<условный-выбор> - возвращает альтернативу, для которой выполняется условие выбора альтернативы.

<условный-выбор> = CASE
  { WHEN <логическое-выражение> THEN <возвращаемое-значение> }
  [ ELSE <возвращаемое-значение> ]
  END

WHEN - открывает описание элемента выбора в списке альтернатив. Список альтернатив может содержать несколько элементов выбора.

<логическое-выражение> - если результат вычисления этого выражения true, то возвращается значение текущего элемента выбора.

THEN - разделяет <логическое-выражение> и <возвращаемое-значение> в описании элемента выбора.

<возвращаемое-значение> - результат вычисления этого выражения возвращается оператором CASE.

ELSE - задает значение, возвращаемое если ни один из элементов не был выбран.

CASE проверяет элементы выбора в том порядке, в котором они присутствуют в описании конструкции, и возвращает первый найденный элемент.

Если ни один из элементов не был выбран и блок ELSE опущен, то CASE возвращает NULL.

Примеры

Пример 1. Оператор SELECT с переключаемым выбором.

В этом примере CASE используется для расшифровки условных обозначений категорий книг (поле type).

SELECT
  Category =
	CASE type
	WHEN 'popular_comp' THEN 'Популярно о компьютерах'
	WHEN 'mod_cook' THEN 'Современная кухня'
	WHEN 'business' THEN 'Бизнес'
	WHEN 'psychology' THEN 'Психология'
	WHEN 'trad_cook' THEN 'Традиционная кухня'
	ELSE 'Разное'
	END,
  title AS 'Название',
  price AS 'Цена'

FROM
  titles

WHERE
  price IS NOT NULL

ORDER BY type, price

Пример 2. Оператор SELECT с условным выбором.

В этом примере CASE используется для преобразования цены в текстовое название ценовой категории.

SELECT
  'Ценовая категория' = 
	CASE 
	WHEN price IS NULL THEN 'Нет данных по цене'
	WHEN price < 10 THEN 'Дешевая книга'
	WHEN price >= 10 and price < 20 THEN 'Приемлемая цена'
	ELSE 'Дорогая книга!'
	END,
  title AS 'Название'

FROM
  titles

ORDER BY price

Пример 3. Оператор SELECT с условным выбором и функцией SUBSTRING.

В этом примере CASE используется для расшифровки условных обозначений категорий книг (поле type) по первым двум символам категории.

SELECT
  title AS 'Название',
  'Категория' = 
	CASE
	WHEN SUBSTRING(type, 1, 2) = 'BU' THEN 'Бизнес'
	WHEN SUBSTRING(type, 1, 2) = 'MC' THEN 'Современная кухня'
	WHEN SUBSTRING(type, 1, 2) = 'PC' THEN 'Популярно о компьютерах'
	WHEN SUBSTRING(type, 1, 2) = 'PS' THEN 'Психология'
	WHEN SUBSTRING(type, 1, 2) = 'TC' THEN 'Традиционная кухня'
	END

FROM
  titles

Версия

Атлантис 5.3.07.