데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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/



강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp




No. Subject Author Date Views
1673 SQL Server 기본 백업 폴더 변경하기 jevida(강성욱) 2016.09.13 4085
1672 sp_helpindex 의 향상된 버전 minsouk 2016.05.17 4565
1671 Spatial Index (공간 인덱스) 생성, 수정, 삭제 jevida(강성욱) 2016.01.11 9353
1670 Spatial Indexing 개요 (공간 인덱스) jevida(강성욱) 2016.01.11 7518
1669 Event Session을 이용한 Session Health check jevida(강성욱) 2016.01.11 6917
1668 SQL Server 2012 XML 플랜을 통한 병렬화 되지 않는 이유 살펴보기 jevida(강성욱) 2016.01.11 7505
1667 Event Session을 이용한 SQL OS Session Schedule check jevida(강성욱) 2016.01.11 7296
1666 Event Session을 이용한 Memory Health check jevida(강성욱) 2016.01.11 6956
1665 Event Session을 이용한 CPU Health check jevida(강성욱) 2016.01.11 8449
1664 DMV를 이용한 I/O Health check jevida(강성욱) 2016.01.11 7340
» CONCAT 함수 (문자열 연결하기)와 주의 사항 jevida(강성욱) 2016.01.11 28021
1662 SQL Server 2012 Columnstore Index jevida(강성욱) 2016.01.11 7535
1661 SQL Server 2012 File Stream / Table 관련 DMV jevida(강성욱) 2016.01.11 4862
1660 SQL Server2012 DMV – 메모리 덤프, 서비스, 구성 확인 jevida(강성욱) 2016.01.11 4707
1659 SQL Server2012 향상된 디버깅 기능 jevida(강성욱) 2016.01.11 4381
1658 SQL Server2012 매개 변수 구성 jevida(강성욱) 2016.01.11 3492
1657 SQL Server2012 도움말 설치 jevida(강성욱) 2016.01.11 3457
1656 SQL Server2012 Checkpoint 제어 jevida(강성욱) 2016.01.11 5319
1655 SSIS 패지키의 메타데이터 유효성 검사 중지하기 jevida(강성욱) 2016.01.11 2952
1654 SSIS 로그 보관기간 설정 (CleanUp 기간 설정) jevida(강성욱) 2016.01.11 4310





XE Login