SQL Server에서 여러 행(Row)의 컬럼 값을 하나로 합치기 위해서 FOR XML PATH 구분과 함께
STUFF 함수를 사용하면 됩니다.
STUFF() 함수는 문자열을 자리수 만큼 특정문자로 치환하고 문자열로 리턴합니다.
XML로 리턴된 결과의 첫번째 문자 ',' 을 빈문자로 치환하고 문자열로 변환합니다.
STUFF ( character_expression , start , length , replace_with_expression )
character_expression
문자 데이터의 식입니다. character_expression 은 문자나 이진 데이터의 '상수', '변수' 또는 '열'일 수 있습니다.
start
삭제 및 삽입을 시작할 위치를 지정하는 정수 값입니다.
start 가 음수 또는 0 이면 Null 문자열이 반환됩니다. start 가 첫번째 character_expression 보다
긴 경우 null 문자열이 반환됩니다. start 는 bigint 형식일 수 있습니다.
length
삭제할 문자 수를 지정하는 정수입니다. length가 음수이면 null 문자열이 반환됩니다.
length 가 첫번째 character_expression 보다 긴 경우 마지막 character_expression 의 마지막 문자까지 삭제됩니다.
길이가 0 인 경우, 시작 위치에 삽입이 발생하고 어떤 문자도 삭제되지 않습니다.
length 는 bigint 형식일 수 있습니다.
replace_with_expression
문자 데이터의 식입니다. replace_with_expression 은 문자나 이진 데이터의 '상수', '변수' 또는 '열'일 수 있습니다.
이 식은 character_expression 에서 start부터 length 문자를 바꿉니다. NULL 을 replace_with_expression 으로
제공할 경우 아무것도 삽입하지 않고 문자를 제거합니다.
예제
SELECT STUFF('abcdefg', 2, 3, 'ijklmn') ;
--------------
aijklmnefg
활용
아래 sample 테이블의 데이터로, emame별로 city 정보를 합쳐보겠습니다.