SQL Server функция CASE
В SQL Server (Transact-SQL) оператор CASE имеет функциональные возможности оператора IF-THEN-ELSE. Вы можете использовать оператор CASE в SQL-предложении.
Синтаксис
Синтаксис оператора CASE в SQL Server (Transact-SQL):
CASE expression
WHEN value_1 THEN result_1
WHEN value_2 THEN result_2
.
WHEN value_n THEN result_n
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
.
WHEN condition_n THEN result_n
Параметры или аргументы
expression — выражение, которое будет сравниваться с каждым из предоставленных значений. (то есть: value_1 , value_2 , . value_n ).
value_1 , value_2 , . value_n — значения, которые будут сравниваться. Значения сравниваются в указанном порядке. Когда value соответствует expression , оператор CASE выполнит указанные команды и не будет дальше сравнивать value .
condition_1 , condition_2 , . condition_n — условия, которые будут сравниваться. Условия сравниваются в указанном порядке. Как только условие окажется истинным, оператор CASE вернет результат и не будет сравнивать условия дальше. Все условия должны быть одного и того же типа.
result_1 , result_2 , . result_n – возвращаемые значение после того, как условие установлено как true. Все значения должны быть одного типа данных.
Примечание
- Если value / condition не определено как TRUE, оператор CASE вернет значение в операторе ELSE.
- Если ELSE опущено, и ни одно условие не является истинным, то оператор CASE вернет NULL.
- Условия сравниваются в указанном порядке. Как только условие окажется истинным, оператор CASE вернет результат и не будет сравнивать условия дальше.
- Вы не можете использовать оператор CASE для управления потоком программы, вместо этого используйте циклы и условные операторы.
Применение
Оператор CASE может использоваться в следующих версиях SQL Server (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005
Пример
Рассмотрим некоторые примеры SQL Server оператора CASE, чтобы понять, как использовать оператор CASE в SQL Server (Transact-SQL). Например:
CASE ОПЕРАТОР
В Oracle/PLSQL оператор CASE имеет функциональность IF-THEN-ELSE. Начиная с Oracle 9i, вы можете использовать оператор CASE в SQL предложении.
Синтаксис
Синтаксис оператора CASE в Oracle/PLSQL:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
.
WHEN condition_n THEN result_n
ELSE result
END
Параметры или аргументы
expression Не является обязательным. Это значение, которое вы сравниваете с условиями (то есть: condition_1 . condition_n ). condition_1 .. condition_n должны быть одного типа. Условия оцениваются по порядку, одно за другим. После того, как условие примет значение TRUE (истина), оператор CASE вернет результат, и не будет оценивать условия дальше. result_1 .. result_n все должны быть одного типа данных. Это значение возвращается единожды, когда condition примет TRUE (истина).
Примечание
- Если условие не примет TRUE, то оператор CASE вернет значение предложения ELSE.
- Если предложение ELSE опущено и условие не примет TRUE, то оператор CASE вернет NULL.
- Оператор CASE может иметь до 255 сравнений. Каждое предложение WHEN . THEN рассматривает 2 сравнения.
Применение
Оператор CASE можно использовать в следующих версиях Oracle / PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Пример
Вы можете использовать оператор CASE в SQL предложении следующим образом:
Оператор CASE стр. 1
Пусть требуется вывести список всех моделей ПК с указанием их цены. При этом если модель отсутствует в продаже (ее нет в таблице РС), то вместо цены вывести текст «Нет в наличии».
Список всех моделей ПК с ценами можно получить с помощью запроса:
Консоль
Выполнить
В результирующем наборе отсутствующая цена будет заменена NULL -значением:
Чтобы заменить NULL -значения нужным текстом, можно воспользоваться оператором CASE :
Консоль
Выполнить
Оператор CASE в зависимости от указанных условий возвращает одно из множества возможных значений. В нашем примере условием является проверка на NULL . Если это условие выполняется, то возвращается текст «Нет в наличии», в противном случае (ELSE) возвращается значение цены.
Здесь есть один принципиальный момент. Поскольку результатом оператора SELECT всегда является таблица, то все значения любого столбца должны иметь один и тот же тип данных (с учетом неявного приведения типов). Поэтому мы не можем наряду с ценой (числовой тип) выводить символьную константу. Вот почему к полю price применяется преобразование типов, чтобы привести его значения к символьному представлению. В результате получим:
Страницы: | 1 | 2 | 3 | 4 |
Оператор CASE стр. 2
Оператор CASE может быть использован в одной из двух синтаксических форм записи:
Все предложения WHEN должны иметь одинаковую синтаксическую форму, то есть нельзя смешивать первую и вторую формы. При использовании первой синтаксической формы условие WHEN удовлетворяется, как только значение проверяемого выражения станет равным значению выражения, указанного в предложении WHEN . При использовании второй синтаксической формы условие WHEN удовлетворяется, как только предикат принимает значение TRUE . При удовлетворении условия оператор CASE возвращает значение, указанное в соответствующем предложении THEN . Если ни одно из условий WHEN не выполнилось, то будет использовано значение, указанное в предложении ELSE . При отсутствии ELSE , будет возвращено NULL -значение. Если удовлетворены несколько условий, то будет возвращено значение предложения THEN первого из них, так как остальные просто не будут проверяться.
В приведенном выше примере была применена вторая форма оператора CASE .
Заметим, что для проверки на NULL стандарт предлагает более короткую форму — оператор COALESCE . Он имеет произвольное число параметров и возвращает значение первого из них, отличного от NULL . Для двух параметров оператор COALESCE(A, B) эквивалентен следующему оператору CASE :
Решение рассмотренного выше примера при использовании оператора COALESCE можно переписать следующим образом:
Консоль
Выполнить