논리 함수 - CHOOSE (Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스Microsoft Fabric의 SQL 데이터베이스

Transact-SQL 함수는 CHOOSE 데이터베이스 엔진 내 값 목록에서 지정된 인덱스에 있는 항목을 반환합니다.

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.

예제

이 글의 코드 샘플은 Azure Data SQL Samples Repository GitHub 저장소에서 다운로드할 수 있는 , , AdventureWorksDW2025또는 AdventureWorksLT2025 샘플 데이터베이스를 사용합니다AdventureWorks2025.

A. 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

C. MONTH와 조합된 CHOOSE

다음 예시는 제품 모델이 마지막으로 수정된 시즌을 반환합니다. 이 함수는 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