- •2. Функции обработки значений
- •2.1. Строковые функции
- •2.2. Числовые функции
- •2.3. Функции даты-времени
- •3. Вычисляемые выражения
- •4. Условные выражения с оператором case
- •4.1. Оператор case со значениями
- •4.2. Оператор case с условиями поиска
- •4.3. Функции nullif и coalesce
- •Заполнить в тетради!!!
4. Условные выражения с оператором case
В обычных языках программирования имеются операторы условного перехода, которые позволяют управлять вычислительным процессом в зависимости от того, выполняется или нет не условие. В языке SQL таким оператором является CASE (случай, обстоятельство, экземпляр). В SQL:2003 этот оператор возвращает значение и, следовательно, может использоваться в выражениях. Он имеет две основные формы.
4.1. Оператор case со значениями
Оператор CASE со значениями имеет следующий синтаксис:
CASE проверяемое_значение
WHEN значение1 THEN результат1
WHEN значение2 THEN результат2
…
WHEN значениеN THEN результатN
ELSE результатХ
END
В случае, когда проверяемое_значение равно значение1, оператор CASE возвращает значение результат1, указанное после ключевого слова THEN (то). В противном случае проверяемое_значение сравнивается с значение2, и если они равны, то возвращается значение результат2, в противном случае проверяемое_значение сравнивается со следующим значением, указанным после ключевого слова WHEN (когда) и т.д. Если проверяемое_значение не равно ни одному из таких значений, то возвращается значение результатX, указанное после ключевого слова ELSE (иначе).
Ключевое слово ELSE не является обязательным. Если оно отсутствует и ни одно из значений, подлежащих сравнению, не равно проверяемому значению, то оператор case возвращает NULL.
Пример:
Допустим, на основе таблицы Клиенты требуется получить таблицу, в которой названия регионов заменены их кодовыми номерами. Если в исходной таблице различных регионов не слишком много, то для решения данной задачи удобно воспользоваться запросом с оператором CASE:
SELECT Имя, Адрес,
CASE Регион
WHEN 'Москва' THEN '77'
WHEN 'Тверская область' THEN '69'
…
ELSE Регион
END
AS Код региона
FROM Клиенты;
4.2. Оператор case с условиями поиска
Вторая форма оператора CASE предполагает его использование при поиске в таблице тех записей, которые удовлетворяют определенному условию:
CASE
WHEN условие1 THEN результат1
WHEN условие2 THEN результат2
…
WHEN условиеN THEN результатN
ELSE результатХ
END
Оператор CASE проверяет, истинно ли условие1 для первой записи в наборе, определенном оператором WHERE, или во всей таблице, если WHERE отсутствует. Если да, то CASE возвращает значение результат1. В противном случае для данной записи проверяется условие2. Если оно истинно, то возвращается значение результат2 и т. д. Если ни одно из условий не выполняется, то возвращается значение результатX, указанное после ключевого слова ELSE.
Ключевое слово ELSE не является обязательным. Если оно отсутствует и ни одно из условий не выполняется, оператор CASE возвращает NULL. После того как оператор, содержащий CASE, выполнится для первой записи, происходит переход к следующей записи. Так продолжается до тех пор, пока не будет обработан весь набор записей.
Пример:
Предположим, в таблице Книги (Название, Цена) столбец Цена имеет значение NULL, если соответствующей книги нет в наличии.
Следующий запрос возвращает таблицу, в которой вместо null отображается текст "нет в наличии":
SELECT Название,
CASE
WHEN Цена IS NULL THEN 'Нет в наличии'
ELSE CAST(Цена AS CHAR(8))
END
AS Цена FROM Книги;
Все значения одного и того же столбца должны иметь одинаковые типы. Поэтому в данном запросе используется функция преобразования типов cast для приведения числовых значений столбца цена к символьному типу.
