+(문자열 연결)(Transact-SQL)
두 개 이상의 문자 또는 이진 문자열, 열 또는 문자열 및 열 이름의 조합을 하나의 식(문자열 연산자)으로 연결하는 문자열 식의 연산자입니다.
구문
expression + expression
인수
expression
문자 및 이진 데이터 형식 범주에서 image, ntext 또는 text 데이터 형식을 제외한 모든 데이터 형식으로 구성된 유효한 식입니다. 두 식이 모두 동일한 데이터 형식으로 되어 있거나 식 하나가 암시적으로 다른 식의 데이터 형식으로 변환될 수 있어야 합니다.이진 문자열 사이에 문자가 있는 형태의 연결에서는 문자 데이터로의 명시적 변환이 필요합니다. 다음 예에서는 이진 연결에 CONVERT 또는 CAST가 필요한 경우와 그렇지 않은 경우를 보여 줍니다.
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 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)를 참조하십시오.
주의
+ (문자열 연결) 연산자는 비어 있는 문자열, 즉 길이가 0인 문자열을 다룰 때와 NULL 또는 알 수 없는 값을 다룰 때 다르게 동작합니다. 길이가 0인 문자열은 문자가 포함되지 않은 두 개의 작은 따옴표로 지정할 수 있습니다. 길이가 0인 이진 문자열은 16진수 상수에 바이트 값이 지정되지 않은 0x로 지정할 수 있습니다. 길이가 0인 문자열을 연결하면 항상 지정된 문자열 2개가 연결됩니다. Null 값을 가진 문자열을 처리할 때는 세션 설정에 따라 연결 결과가 달라집니다. Null 값에 대해 수행되는 산술 연산에서 Null 값이 Null이 아닌 다른 값과 더해지면 대개 알 수 없는 값이 얻어지는 것처럼, Null 값을 다른 문자열과 연결하면 결과는 Null로 계산됩니다. 하지만 현재 세션에 대한 CONCAT_NULL_YIELDS_NULL의 설정을 변경하여 이 동작을 변경할 수 있습니다. 자세한 내용은 SET CONCAT_NULL_YIELDS_NULL(Transact-SQL)을 참조하십시오.
문자열 연결의 결과가 제한치인 8,000바이트를 초과하면 결과가 잘립니다. 하지만 연결된 문자열 중 하나 이상이 큰 값 형식이면 잘림은 발생하지 않습니다.
예
1.문자열 연결 사용
다음 예에서는 여러 문자 열에서 사람의 성, 쉼표, 공백 및 사람의 이름을 사용하여 Name이라는 열 머리글의 단일 열을 만듭니다. 결과 집합에서 성과 이름이 사전 오름차순으로 정렬됩니다.
USE AdventureWorks2012;
GO
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
2.numeric 및 date 데이터 형식의 결합
다음 예에서는 CONVERT 함수를 사용하여 numeric과 date 데이터 형식을 연결합니다.
USE AdventureWorks2012;
GO
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
(1 row(s) affected)
3.여러 문자열의 연결
다음 예에서는 여러 개의 문자열을 하나의 긴 문자열로 연결하여 Adventure Works Cycles에 부사장들의 성과 첫 번째 이니셜을 표시합니다. 성 뒤에는 쉼표, 그리고 첫 번째 이니셜 뒤에는 마침표가 추가됩니다.
USE AdventureWorks2012;
GO
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
(3 row(s) affected)