Логические функции - CHOOSE (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLКонечная точка аналитики SQL в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

CHOOSE Функция Transact-SQL возвращает элемент по указанному индексу из списка значений в ядро СУБД.

Соглашения о синтаксисе Transact-SQL

Синтаксис

CHOOSE ( index , val_1 , val_2 [ , val_n ] )

Аргументы

index

Целочисленное выражение, представляющее индекс на основе 1 в списке следующих за ним элементов.

Если предоставленное значение индекса имеет числовой тип данных, отличный от int, это значение неявно преобразуется в целое число. Если значение индекса превышает границы массива значений, CHOOSE возвращается NULL.

val_1 ... val_n

Список значений с разделёнными запятыми любого типа данных.

Типы возвращаемых данных

Возвращает тип данных с наивысшим приоритетом из переданного функции набора типов. Дополнительные сведения см. в разделе "Приоритет типа данных".

Замечания

CHOOSE действует как индекс в массив, где массив состоит из аргументов, следующих за аргументом индекса. Аргумент индекса определяет, какое из следующих значений CHOOSE возвращается.

Явное включение чрезвычайно большого числа значений (тысяч значений, разделённых запятыми) в клаузе CHOOSE может потреблять ресурсы и возвращать следующую ошибку:

Msg 8631, Level 17, State 1, Line 1
Internal error: Server stack limit has been reached. Please look for potentially deep nesting in your query, and try to simplify it.

Примеры

Образцы кода в этой статье используют образцы баз данных AdventureWorks2025, AdventureWorksDW2025 или AdventureWorksLT2025, которые можно скачать из репозитория GitHub Azure Data SQL Samples Repository.

А. Пример CHOOSE

Следующий пример возвращает третий элемент из списка значений.

SELECT CHOOSE(3, 'Manager', 'Director', 'Developer', 'Tester') AS Result;

Вот результирующий набор.

Result
-------------
Developer

B. Пример CHOOSE на основе столбца

Следующий пример возвращает базовую строку символа на основе значения в столбце ProductCategoryID .

USE AdventureWorks2025;
GO

SELECT ProductCategoryID,
       CHOOSE(ProductCategoryID, 'A', 'B', 'C', 'D', 'E') AS Expression1
FROM Production.ProductCategory;

Вот результирующий набор.

ProductCategoryID Expression1
----------------- -----------
3                 C
1                 A
2                 B
4                 D

В. CHOOSE в сочетании с MONTH

Следующий пример возвращает сезон, когда модель продукта была в последний раз изменена. Функция MONTH возвращает значение месяца из столбца ModifiedDate .

USE AdventureWorksLT;
GO

SELECT Name,
       ModifiedDate,
       CHOOSE(MONTH(ModifiedDate), 'Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer', 'Summer', 'Summer', 'Autumn', 'Autumn', 'Autumn', 'Winter') AS Quarter_Modified
FROM SalesLT.ProductModel AS PM
WHERE Name LIKE '%Frame%'
ORDER BY ModifiedDate;

Вот результирующий набор.

Name                        ModifiedDate            Quarter_Modified
--------------------------- ----------------------- ----------------
HL Road Frame               2002-05-02 00:00:00.000 Spring
HL Mountain Frame           2005-06-01 00:00:00.000 Summer
LL Road Frame               2005-06-01 00:00:00.000 Summer
ML Road Frame               2005-06-01 00:00:00.000 Summer
ML Road Frame-W             2006-06-01 00:00:00.000 Summer
ML Mountain Frame           2006-06-01 00:00:00.000 Summer
ML Mountain Frame-W         2006-06-01 00:00:00.000 Summer
LL Mountain Frame           2006-11-20 09:56:38.273 Autumn
HL Touring Frame            2009-05-16 16:34:28.980 Spring
LL Touring Frame            2009-05-16 16:34:28.980 Spring