[MSSQL] XML 텍스트 데이터를 필드로 SELECT 또는 테이블 형태로 SELECT하기 (XML to DB)
XML 형태로 저장되어 있는 데이터를 필요한 데이터만 파싱하여 사용하고자 할 때 유용한 쿼리를 공유합니다.
XML 파싱(Parsing) 기법으로 MSSQL 내장함수를 사용합니다.
1. STRING 변수를 선언합니다.
2. 오브젝트형 XML 변수를 선언합니다.
3. STRING 변수에 XML 데이터를 삽입합니다.
4. 파싱-1, 파싱-2 쿼리로 필요한 데이터를 필드로 추출하거나 테이블형태로 출력합니다.
DECLARE @XML_STRING VARCHAR(MAX)
DECLARE @XML_OBJECT XML
SET @XML_STRING = N'<root><body><no>1</no><data>testData1</data><date>2021-11-03 17:00:00</date></body><body><no>2</no><data>testData2</data><date>2021-11-03 17:00:00</date></body></root>'
/* 파싱-1 */
SELECT
CONVERT(xml, @XML_STRING).value('(/root/body/no)[1]','varchar(10)') AS no,
CONVERT(xml, @XML_STRING).value('(/root/body/data)[1]','varchar(100)') AS data,
CONVERT(xml, @XML_STRING).value('(/root/body/no)[2]','varchar(10)') AS no1,
CONVERT(xml, @XML_STRING).value('(/root/body/data)[2]','varchar(100)') AS data1
/* 파싱-2 */
/* XML OBJECT로 컨버트 */
SET @XML_OBJECT = CONVERT(XML, @XML_STRING)
SELECT
x.XmlCol.value('(no/text())[1]', 'VARCHAR(10)') AS no,
x.XmlCol.value('(data/text())[1]', 'VARCHAR(100)') AS data,
x.XmlCol.value('(date/text())[1]', 'DATETIME') AS date
FROM @XML_OBJECT.nodes(N'/root/body') AS x(XmlCol)
- 실행결과