다음을 통해 공유


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

적용 대상: Azure SQL Database

|| 문자열 식의 파이프 연산자는 둘 이상의 문자 또는 이진 문자열, 열 또는 문자열과 열 이름의 조합을 하나의 식(문자열 연산자)으로 연결합니다. 예를 들어 SELECT 'SQL ' || 'Server';SQL Server를 반환합니다.

Transact-SQL 구문 표기 규칙

구문

expression || expression

인수

expression

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

반환 형식

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

설명

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

길이가 0인 문자열 및 문자

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

NULL 값 연결

값에 NULL 대해 수행되는 산술 연산과 마찬가지로 값이 알려진 값에 추가될 때 NULL 결과는 일반적으로 NULL 값입니다. 값으로 NULL 수행되는 문자열 연결 작업도 결과를 생성 NULL 해야 합니다.

연산자는 || 이 옵션을 적용 SET CONCAT_NULL_YIELDS_NULL 하지 않으며 ANSI SQL 동작이 활성화된 것처럼 항상 동작하며 NULL 입력이 있으면 생성됩니다 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 또는 AdventureWorksDW2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

A. 문자열 연결 사용

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

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