FOR XML PATH, STUFF 그리고 조합해 보기
FOR XML PATH
- 쿼리 결과를 XML 형태로 표현.
- FOR XML PATH ('row element 이름')
- 만약 'row element 이름'이 없으면 <row>로 감싸진다.
- 행 구분자 추가해서, 합친 문자로도
SELECT lastname FROM HR.Employees FOR XML PATH
ex) <row><lastname>Cameron</lastname></row><row><lastname>Davis</lastname></row><row><lastname>Doyle</lastname></row><row><lastname>Funk</lastname></row><row><lastname>King</lastname></row><row><lastname>Lew</lastname></row><row><lastname>Mortensen</lastname></row><row><lastname>Peled</lastname></row><row><lastname>Suurs</lastname></row>
SELECT lastname FROM HR.Employees FOR XML PATH ('LName');
결과 - <LName>
<lastname>Cameron</lastname>
</LName>
<LName>
<lastname>Davis</lastname>
</LName>
<LName>
<lastname>Doyle</lastname>
</LName>
<LName>
<lastname>Funk</lastname>
</LName>
<LName>
<lastname>King</lastname>
</LName>
<LName>
<lastname>Lew</lastname>
</LName>
<LName>
<lastname>Mortensen</lastname>
</LName>
<LName>
<lastname>Peled</lastname>
</LName>
<LName>
<lastname>Suurs</lastname>
</LName>
SELECT '/' + lastname FROM HR.Employees FOR XML PATH ('');
결과 - /Cameron/Davis/Doyle/Funk/King/Lew/Mortensen/Peled/Suurs
여기까지 FOR XML PATH의 기본 사용법이고,
아래의 STUFF와 조합을 많이 쓰는듯싶다.
STUFF
- 문자열의 위치와 길이를 지정해 다른 문자로 치환한다.
- STUFF(문자열, 위치, 길이, 치환할 문자)
SELECT STUFF('a-b-c', 1, 1,'ABC')
결과) 'a-b-c' => 'ABC-b-c' 로 치환
이 둘 간에 조합
1. 문자열 합치기
위에 합친 문자열을 가지고
/Cameron/Davis/Doyle/Funk/King/Lew/Mortensen/Peled/Suurs
2. 맨 앞의 구분자 제거
SELECT STUFF(
(SELECT '/' + lastname FROM HR.Employees FOR XML PATH ('')
), 1, 1, '') AS '결과'
FROM HR.Employees;
3. row 수만큼 표현되므로 중복제거로 DISTINCT를 쓴다.
SELECT DISTINCT STUFF(
(SELECT '/' + lastname FROM HR.Employees FOR XML PATH ('')
), 1, 1, '') AS '결과'
FROM HR.Employees;
살짝 복잡한 면도 있는 듯 하지만..
'프로그래밍&IT > SQL Server (MS-SQL)' 카테고리의 다른 글
MSSQL의 조회데이터를 csv로 만들기 (1) | 2024.09.06 |
---|---|
SQL Server - 테이블 수정 저장시 '테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함' 옵션 (0) | 2024.03.17 |
SQL Server - GO에 대해서 (BATCH) (0) | 2024.03.02 |
트랜젝션.Transaction - 원자성, 일관성, 격리성, 영속성 (ACID) (0) | 2024.02.19 |
데이터 조작 - 데이터 입력하기 (INSERT VALUES, SELECT, BULK) (1) | 2024.02.18 |