DB

MSSQL 문자 치환 각행에 있는 문자를 하나의 문자로

조셉(개발자) 2024. 11. 13. 07:23
반응형

STUFF() / FOR XML PATH()

STUFF
문자열의 위치와 길이를 지정하여 다른 문자로 치환하는 함수
STUFF(문자열, 위치, 길이, 치환할 문자)

 

FOR XML PATH
쿼리의 결과 데이터를 XML 형태로 표현 
FOR XML PATH('row element명')

예제)

WITH TEST_TABLE AS
(
    SELECT 1 as seq, '햄버거' AS name UNION ALL
    SELECT 1 as seq, '부대찌개' AS name UNION ALL
    SELECT 2 as seq, '된장찌개' AS name UNION ALL 
    SELECT 2 as seq, '소고기전골' AS name UNION ALL
    SELECT 3 as seq, '라면' AS name
)
SELECT Name
FROM   TEST_TABLE         
FOR XML PATH('음식')

결과)

<음식>
  <Name>햄버거</Name>
</음식>
<음식>
  <Name>부대찌개</Name>
</음식>
<음식>
  <Name>된장찌개</Name>
</음식>
<음식>
  <Name>소고기전골</Name>
</음식>
<음식>
  <Name>라면</Name>
</음식>

▶ 하나로 표현

WITH TEST_TABLE AS 
( 
    SELECT 1 as seq, '햄버거' AS name UNION ALL
    SELECT 1 as seq, '부대찌개' AS name UNION ALL
    SELECT 2 as seq, '된장찌개' AS name UNION ALL
    SELECT 2 as seq, '소고기전골' AS name UNION ALL
    SELECT 3 as seq, '라면' AS name
) 
SELECT DISTINCT STUFF(
                    (
                        SELECT ',' + Name
                        FROM   TEST_TABLE         
                        FOR XML PATH('')
                    ),1,1,'') AS '음식'
FROM   TEST_TABLE AS TEST

결과

 

반응형