Logické funkce - VYBRAT (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLKoncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Funkce CHOOSE Transact-SQL vrací položku na zadaném indexu ze seznamu hodnot v Database Engine.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

index

Celočíselný výraz, který reprezentuje index založený na jedničce do seznamu následujících položek.

Pokud má daná hodnota indexu číselný datový typ jiný než int, hodnota je implicitně převedena na celé číslo. Pokud hodnota indexu překročí hranice pole hodnot CHOOSE , vrátí NULL.

val_1 ... val_n

Seznam hodnot oddělených čárkami libovolného datového typu.

Návratové typy

Vrátí datový typ s nejvyšší předností z množiny typů předaných funkci. Další informace naleznete v tématu Priorita datového typu.

Poznámky

CHOOSE funguje jako index do pole, kde pole je složeno z argumentů následujících po indexovém argumentu. Index argument určuje, která z následujících hodnot CHOOSE se vrátí.

Explicitní zahrnutí extrémně velkého počtu hodnot (tisíce hodnot oddělených čárkami) do klauzule CHOOSE může spotřebovat zdroje a vrátit následující chybu:

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.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorksDW2025, AdventureWorksLT2025 nebo AdventureWorks2025, kterou si můžete stáhnout z úložiště GitHub Azure Data SQL Samples Repository.

A. VYBERTE příklad

Následující příklad vrací třetí položku ze seznamu hodnot.

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

Tady je soubor výsledků.

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

B. VYBERTE příklad podle sloupce

Následující příklad vrací základní znakový řetězec založený na hodnotě ve sloupci ProductCategoryID .

USE AdventureWorks2025;
GO

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

Tady je soubor výsledků.

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

C. SELECT v kombinaci s MONTH

Následující příklad vrací období, kdy byl model produktu naposledy upraven. Funkce MONTH vrací hodnotu měsíce ze sloupce 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;

Tady je soubor výsledků.

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