다음을 통해 공유


CONCAT(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

이 함수는 둘 이상의 문자열 값을 엔드투엔드 방식으로 연결하거나 조인한 결과 문자열을 반환합니다.

참고 항목

연결 중에 구분 값을 추가하려면 CONCAT_WS 사용합니다.

Transact-SQL 구문 표기 규칙

구문

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

인수

argument1, argument2 [ , argumentN ]

문자열 값의 식입니다. 함수에는 CONCAT 두 개 이상의 인수가 필요하며 인수는 254개 이하입니다.

반환 형식

길이와 형식이 입력에 따라 달라지는 문자열 값입니다.

설명

CONCAT는 가변 개수의 문자열 인수를 가져와서 단일 문자열로 연결(또는 조인)합니다. 최소 두 개의 입력 값이 필요합니다. 그렇지 않으면 CONCAT 오류가 발생합니다. CONCAT는 병합하기 전에 모든 인수를 문자열 형식으로 암시적으로 변환합니다. CONCAT는 null 값을 빈 문자열로 암시적으로 변환합니다. CONCAT 모든 NULL 값이 있는 인수를 받으면 varchar(1) 형식의 빈 문자열을 반환합니다. 문자열에 대한 암시적 변환은 데이터 형식 변환에 대한 기존 규칙을 따릅니다. 데이터 형식 변환에 대한 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하십시오.

반환 형식은 인수의 형식에 따라 달라집니다. 아래 표에서는 매핑을 보여 줍니다.

입력 형식 출력 형식 및 길이
1. SQL-CLR 시스템 형식, SQL-CLR UDT 또는 nvarchar(max)의 인수 nvarchar(max)
2. 그렇지 않으면 varbinary(max) 또는 varchar(max) 형식의 인수입니다. varchar(max) - 매개 변수 중 하나가 임의 길이의 nvarchar가 아닌 경우. 이 경우 CONCATnvarchar(max) 형식의 결과를 반환합니다.
3. 그렇지 않으면 최대 4,000자의 nvarchar 형식 인수(nvarchar(<= 4000)) nvarchar(<= 4000)
4. 다른 모든 경우 매개 변수 중 하나가 길이가 nvarchar인 경우가 아니면 최대 8,000자(varchar(<= 8000)의 varchar 형식 인수입니다. 이 경우 CONCATnvarchar(max) 형식의 결과를 반환합니다.

CONCAT에서 길이가 4,000자 <= nvarchar 또는 길이가 8,000자 <= varchar 입력 인수를 받으면, 암시적 변환이 결과의 길이에 영향을 줄 수 있습니다. 다른 데이터 형식은 문자열로 암시적으로 변환되는 경우 길이가 달라집니다. 예를 들어 값이 있는 int의 문자열 길이는 2인 반면 값이 있는 1234.56789 float의 문자열 길이는 7(1234.57)입니다.14 따라서 이러한 두 값의 연결은 길이가 9자 이하인 결과를 반환합니다.

입력 인수에 지원되는 LOB(큰 개체) 형식이 없는 경우 반환 형식에 관계없이 반환 형식은 길이가 8,000자로 잘립니다. 이 잘림은 공간을 유지하고 계획 생성 효율성을 지원합니다.

CONCAT 는 SQL Server 2012(11.x) 이상 버전을 실행하는 연결된 서버에서 원격으로 실행할 수 있습니다. 이전 연결된 서버의 경우 연결된 서버가 CONCAT 연결되지 않은 값을 반환한 후 로컬에서 작업이 수행됩니다.

예제

A. CONCAT 사용

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

결과 집합은 다음과 같습니다.

Result
--------------------
Happy Birthday 11/25

B. NULL 값과 함께 CONCAT 사용

CREATE TABLE #temp (
    emp_name NVARCHAR(200) NOT NULL,
    emp_middlename NVARCHAR(200) NULL,
    emp_lastname NVARCHAR(200) NOT NULL
    );

INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');

SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;

결과 집합은 다음과 같습니다.

Result
------------
NameLastname