SQL Server/SQL Server Tip

CONCAT 함수 (문자열 연결하기)와 주의 사항

SungWookKang 2015. 7. 23. 08:44
반응형

CONCAT 함수 (문자열 연결하기)와 주의 사항

   

-       Version : SQL Server 2012

   

SQL Server 2012부터 도입된 CONCAT 함수는 둘 이상의 문자열 값을 연결한 결과를 반환하는 기능을 한다.

   

CONCAT 함수는 다양한 개수의 문자열 인수를 가져와 단일 문자열로 연결한다. 최소 두 개의 입력 값이 필요하며 그렇지 않은 경우 오류가 발생 한다. 모든 인수는 문자열 형식의 암시적으로 변환된 다음 연결 된다. NULL 값은 암시적으로 빈 문자열로 변환되며 모든 문자가 NULL인 경우 varchar(1)형식의 빈 문자열로 반환된다.

   

변환 형식은 인수의 형식에 따라 달라진다. 인수가 nvarchar <= 4000, varchar <= 8000 인 경우 암시적 변환은 결과의 길이에 영향을 줄 수도 있다. 다른 데이터 형식으로 암시적으로 문자열이 변환될 경우 다른 길이를 가진다.

   

LOB형식의 입력 인수가 없는 경우에는 형식에 관계없이 모든 반환 형식이 8000자로 잘린다. 이 잘림은 공간을 유지하고 계획 생성의 효율성을 지원한다.

   

[구문]

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

   

 

   

[문자열 연결 시 암시적 형변환으로 인한 오류]

DECLARE @AGE INT

SET @AGE = 15

   

print 'the age is ' + @age + 'years old'

   

   

[암시적 형변환과 명시적 형변환]

DECLARE @AGE INT

SET @AGE = 15

   

SELECT CONCAT('THE AGE IS ', @AGE, 'YEARS OLD') --IMPLICIT CONVERSION

SELECT 'THE AGE IS ' + CAST(@AGE AS VARCHAR) + 'YEARS OLD' --EXPLICIT CONVERSION

   

   

   

DECLARE @TODAY DATETIME

SET @TODAY = GETDATE()

   

SELECT CONCAT('TODAY IS ', @TODAY) --IMPLICIT CONVERSION

SELECT 'TODAY IS ' + CAST(@TODAY AS VARCHAR) --EXPLICIT CONVERSION

   

   

   

[NULL 문자 연결]

DECLARE @STRING1 VARCHAR(50) ='STRING1'

DECLARE @STRING2 VARCHAR(50)=NULL

 

SELECT @STRING1 + @STRING2 -- RETURN NULL

SELECT CONCAT(@STRING1,@STRING2) -- RETURNS 'STRING1'

   

   

   

[NULL 문자 연결 시 주의 사항]

위에서 설명하였듯이 NULL 형식의 경우 varchar(1)의 빈값을 반환한다.

SELECT

Title,

FirstName,

MiddleName,

LastName,

CONCAT(Title,' ',FirstName,' ',MiddleName,' ',LastName) as MailingName

FROM Person.Person

   

   

   

[참고자료]

l  CONCAT : http://technet.microsoft.com/ko-kr/library/hh231515.aspx

http://www.mssqltips.com/sqlservertip/2985/concatenate-sql-server-columns-into-a-string-with-concat/

http://www.mssqltips.com/sqlservertip/3014/concatenation-of-different-sql-server-data-types/

   

   

2013-08-08 / 강성욱 / http://sqlmvp.kr

반응형