반응형

/*
-- Title : [2k5] 구분자로 구성된 싱글값을 멀티값으로 변환 2
-- Reference : microsoft technet 이종인님
-- Key word : copy_t copy_ymd pivot unpivot 싱글값 멀티값 split
*/
-- 기존에 함수나 XML을 사용하여 변환하였음 => http://dbrang.tistory.com/42

-- 초기화
USE tempdb;
GO

DROP TABLE copy_t;
DROP TABLE array_t;
GO

-- copy_t 생성
CREATE TABLE copy_t
( NO SMALLINT NOT NULL IDENTITY PRIMARY KEY
);
GO

-- copy_t 데이터 저장
INSERT INTO copy_t DEFAULT VALUES;
GO 4000

-- copy_t 확인
SELECT * FROM copy_t;
GO

-- array_t 생성
CREATE TABLE array_t
( id NCHAR(1) NOT NULL PRIMARY KEY
, ARRAY NVARCHAR(100) NOT NULL
);
GO

-- array_t 데이터 저장
INSERT INTO array_t
SELECT 'A','손예진$문정희$이하나$오윤아$하재숙$송애자$조해영$진지희' UNION ALL
SELECT 'B','감우성$형진$김갑수$기주봉$이진욱$서태화' UNION ALL
SELECT 'C','위$사람들의$공통점은$뭘까요?';
GO

-- array_t 확인
SELECT * FROM array_t;
GO

-- 조작 1
SELECT *, LEN(a.ARRAY) "LEN", CHARINDEX('$', a.ARRAY+'$', t.NO) "CHARINDEX"
FROM array_t AS a
INNER JOIN copy_t AS t
ON t.NO <= LEN(a.ARRAY)
WHERE SUBSTRING('$'+a.ARRAY,NO,1)='$';

-- 최종
SELECT a.id, SUBSTRING(a.ARRAY, t.NO, CHARINDEX('$', a.ARRAY+'$', t.NO)-t.NO) "name"
FROM array_t AS a
INNER JOIN copy_t AS t
ON t.NO <= LEN(a.ARRAY)
WHERE SUBSTRING('$'+a.ARRAY,NO,1)='$';

 

반응형

+ Recent posts