다음을 통해 공유


+(문자열 연결)(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 Warehouse

두 개 이상의 문자 또는 이진 문자열, 열 또는 문자열 및 열 이름의 조합을 하나의 식(문자열 연산자)으로 연결하는 문자열 식의 연산자입니다. 예를 들어 SELECT 'book'+'case';bookcase를 반환합니다.

Transact-SQL 구문 표기 규칙

Syntax

expression + expression

참고 항목

SQL Server 2014(12.x) 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

인수

expression

이미지, ntext 또는 텍스트 데이터 형식을 제외한 문자 및 이진 데이터 형식 범주에 있는 데이터 형식 중 하나의 유효한 입니다. 두 식이 모두 동일한 데이터 형식으로 되어 있거나 식 하나가 암시적으로 다른 식의 데이터 형식으로 변환될 수 있어야 합니다.

반환 형식

결과는 우선 순위가 가장 높은 인수의 데이터 형식으로 반환됩니다. 자세한 내용은 데이터 형식 우선 순위를 참조 하세요.

설명

문자열 연결의 결과가 제한치인 8,000바이트를 초과하면 결과가 잘립니다. 그러나 연결된 문자열 중 하나 이상이 큰 값 형식인 경우 잘림이 발생하지 않습니다.

길이가 0인 문자열 및 문자

+ 문자열 연결 연산자는 비어 있거나 길이가 0인 빈 문자열로 작업할 때 또는 알 수 없는 값으로 작업할 때와 NULL다르게 동작합니다. 길이가 0인 문자열은 문자가 포함되지 않은 두 개의 작은 따옴표로 지정할 수 있습니다. 길이가 0인 이진 문자열은 16진수 상수에 지정된 바이트 값 없이 지정할 수 있습니다 0x . 길이가 0인 문자열을 연결하면 항상 지정된 문자열 2개가 연결됩니다.

NULL 값 연결

값이 있는 문자열을 NULL 사용하는 경우 연결 결과는 세션 설정에 따라 달라집니다. 값에 대해 수행되는 산술 연산과 마찬가지로, 값이 알려진 값에 NULL 추가될 때 NULL 결과는 일반적으로 알 수 없는 값이므로 값으로 NULL 수행되는 문자열 연결 작업도 결과를 생성 NULL 해야 합니다.

하지만 현재 세션에 대한 CONCAT_NULL_YIELDS_NULL의 설정을 변경하여 이 동작을 변경할 수 있습니다. 자세한 내용은 SET CONCAT_NULL_YIELDS_NULL을 참조하세요.

필요한 경우 CAST 및 CONVERT 사용

이진 문자열 사이에 문자가 있는 형태의 연결에서는 문자 데이터로의 명시적 변환이 필요합니다.

다음 예제에서는 이진 연결과 함께 사용되어야 하는 경우 CONVERTCAST또는 이진 연결을 사용해야 하는 경우 또는 사용할 필요가 없는 경우CONVERTCAST보여 줍니다.

이 예제에서는 두 개의 이진 문자열을 연결하기 때문에 no CONVERT 또는 CAST function이 필요합니다.

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);

SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2;

이 예제에서는 두 개의 이진 문자열과 공백을 연결하기 때문에 a CONVERT 또는 CAST 함수가 필요합니다.

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);

SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;

-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '
   + CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '
   + CAST(@mybin2 AS VARCHAR(5));

예제

이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

A. 문자열 연결 사용

다음 예제에서는 여러 문자 열의 열 머리글 Name 아래에 쉼표, 단일 공백 및 사람의 이름 뒤에 있는 사람의 패밀리 이름을 사용하여 단일 열을 만듭니다. 결과 집합은 오름차순, 가족 이름순, 이름 순으로 정렬됩니다.

SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;

B. 숫자 및 날짜 데이터 형식 결합

다음 예에서는 CONVERT 함수를 사용하여 numericdate 데이터 형식을 연결합니다.

SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO

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

------------------------------------------------
The order is due on 04/23/2007

C. 여러 문자열 연결 사용

다음 예제에서는 여러 문자열을 연결하여 하나의 긴 문자열을 형성하여 Adventure Works Cycles에서 부사장의 첫 번째 이니셜과 가족 이름을 표시합니다. 쉼표는 패밀리 이름 뒤와 첫 번째 이니셜 이후의 마침표에 추가됩니다.

SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle
FROM Person.Person AS p
    JOIN HumanResources.Employee AS e
    ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO

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

Name               Title
-------------      ---------------`
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales

D. 연결에 큰 문자열 사용

다음 예제에서는 여러 문자열을 연결하여 하나의 긴 문자열을 만든 다음, 최종 문자열의 길이를 컴퓨팅합니다. 식 계산이 왼쪽에서 시작되므로 결과 집합의 최종 길이는 16,000입니다. 즉, @x@y + @z + => (@x + @z) + . @y 이 경우 (@x + @z)의 결과는 8,000바이트에서 잘린 다음 @y 결과 집합에 추가되어 최종 문자열 길이가 16,000입니다. @y 큰 값 형식 문자열이므로 잘림이 발생하지 않습니다.

DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO

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

y
-------
16000

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

E. 여러 문자열 연결 사용

다음 예제에서는 여러 문자열을 연결하여 하나의 긴 문자열을 형성하여 예제 데이터베이스 내에서 가족 이름과 부사장의 첫 번째 이니셜을 표시합니다. 쉼표는 패밀리 이름 뒤와 첫 번째 이니셜 이후의 마침표에 추가됩니다.

SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;

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

Name               Title
-------------      ---------------
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales