Funkcje logiczne - WYBIERZ (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstancePunkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Funkcja CHOOSE Transact-SQL zwraca element w określonym indeksie z listy wartości w Database Engine.

Transact-SQL konwencje składni

Składnia

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

Arguments

indeks

Wyrażenie całkowitoliczbowe, które reprezentuje indeks oparty na 1 w liście elementów następujących po nim.

Jeśli podana wartość indeksu ma inny typ danych niż int, wartość ta jest domyślnie przeliczana na liczbę całkowitą. Jeśli wartość indeksu przekracza ograniczenia tablicy wartości, CHOOSE zwraca NULL.

val_1 ... val_n

Lista wartości oddzielonych przecinkami dowolnego typu danych.

Typy zwracane

Zwraca typ danych o najwyższym przykładzie spośród zestawu typów przekazanych funkcji. Aby uzyskać więcej informacji, zobacz Pierwszeństwo typu danych.

Uwagi

CHOOSE działa jak indeks w tablicy, gdzie tablica składa się z argumentów następujących po argumentze indeksowym. Argument indeksu określa, która z poniższych wartości CHOOSE zwraca się.

Jawne włączenie do klauzuli CHOOSE niezwykle dużej liczby wartości (tysiące wartości oddzielonych przecinkami) może zużyć zasoby i zwrócić następujący błąd:

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.

Przykłady

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorksDW2025, AdventureWorksLT2025 lub AdventureWorks2025, którą można pobrać z repozytorium GitHub Azure Data SQL Samples Repository.

A. WYBIERZ przykład

Poniższy przykład zwraca trzeci element z listy wartości.

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

Oto zestaw wyników.

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

B. WYBIERZ przykład na podstawie kolumny

Poniższy przykład zwraca podstawowy ciąg znaków na podstawie wartości w kolumnie ProductCategoryID .

USE AdventureWorks2025;
GO

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

Oto zestaw wyników.

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

C. SELECT w połączeniu z MONTH

Poniższy przykład przywraca sezon, w którym model produktu był ostatnio modyfikowany. Funkcja MONTH zwraca wartość miesiąca z kolumny 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;

Oto zestaw wyników.

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