Функция CHOOSE |
|||||||||||
Нестандартная функция CHOOSE появилась в SQL Server версии 2012. Функция CHOOSE используется для выбора одного из нескольких вариантов. Выбор осуществляется на основании индекса (номера варианта), который является первым параметром функции. Остальные параметры представляют собой варианты выбора. Будет выбран тот вариант, номер которого в списке параметров, совпадает с индексом. Например, запрос вернет Laptop, т.к. это второй элемент списка.Больший интерес представляет случай, когда индексом является выражение, включающее столбцы таблиц. Пусть нам требуется вместо номера пункта (в базе данных "Вторсырье") выводить его название. Поскольку в базе данных названия пунктов не хранятся, будем формировать их "налету", используя функцию CHOOSE:
Очевидно, что функция CHOOSE является еще одним частным вариантом выражения CASE. Наш пример с использовании функции CASE можно переписать в виде:
Если указанному индексу не будет найдено соответствия, то результатом функции CHOOSE будет NULL: Для обработки этого случая в выражении CASE предусмотрено предложение ELSE. С помощью этого предложения мы можем вместо NULL (по умолчанию) вывести, например, UNKNOWN:
Мы легко можем преодолеть этот "недостаток" функции CHOOSE, обернув её функцией COALESCE: но это уже как бы "масло масляное" - case от case.Можно сказать, что функция CHOOSE имеет специфическое применение, но в этих ограниченных случаях она позволяет упростить запись. В заключение приведем еще один пример. Для каждой модели указать, является её номер четным (even) или нечетным (odd).
Предикат в предложении WHERE используется для того, чтобы ограничиться моделями, номера которых представлены числом. Обратите внимание на тип данных столбца model! Надеюсь, что те, кто решает упражнения на сайте sql-ex.ru уже в курсе. :-) Они также должны быть в курсе, что использование функции ISNUMERIC в данном контексте не является радикальным решением. |