Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: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