Mantıksal fonksiyonlar - SELECT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL analiz uç noktasıMicrosoft Fabric'te ambarMicrosoft Fabric'te SQL veritabanı

Transact-SQL fonksiyonu, CHOOSE Database Engine'daki değerler listesinden belirtilen indekste öğeyi döndürür.

Transact-SQL söz dizimi kuralları

Sözdizimi

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

Arguments

dizin

Takip eden öğeler listesine 1 tabanlı bir indeks içeren tamsayı ifadesi.

Verilen indeks değerinin int dışında sayısal veri türü varsa, değer örtük olarak tam sayıya dönüştürülür. Eğer indeks değeri değerler dizisi sınırlarını aşarsa, CHOOSE döndürür NULL.

val_1 ... val_n

Her veri türünün virgülle ayrılmış değerlerinin listesi.

Dönüş türleri

Fonksiyona aktarılan tipler kümesinden en yüksek önceliğe sahip veri tipini döndürür. Daha fazla bilgi için bkz. Veri türü önceliği.

Açıklamalar

CHOOSE dizinin diziyi takip eden argümanlardan oluştuğu bir dizinin içine bir indeks gibi davranır. İndeks argümanı, aşağıdaki değerlerden CHOOSE hangisinin geri döneceğini belirler.

Bir CHOOSE cümlede çok büyük sayıda değer (virgülle ayrılmış binlerce değer) açıkça eklemek, kaynakları tüketebilir ve aşağıdaki hatayı döndürebilir:

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.

Örnekler

Bu makaledeki kod örnekleri, Azure Data SQL Samples Repository GitHub deposundan indirebileceğiniz , AdventureWorksDW2025, veya AdventureWorksLT2025 örnek veritabanını kullanırAdventureWorks2025.

A. ÖRNEK SEÇ

Aşağıdaki örnek, değerler listesinden üçüncü öğeyi geri getirir.

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

Sonuç kümesi aşağıdadır.

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

B. Sütuna göre örnek SEÇ

Aşağıdaki örnek, ProductCategoryID sütundaki değere dayalı temel bir karakter dizisi döndürür.

USE AdventureWorks2025;
GO

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

Sonuç kümesi aşağıdadır.

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

C. AY ile birlikte SELECT

Aşağıdaki örnek, bir ürün modelinin en son değiştirildiği sezonu geri getirir. Fonksiyon, MONTH sütundan ay değerini ModifiedDate döndürür.

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;

Sonuç kümesi aşağıdadır.

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