(,)콤마로 중복된 문자열을 제거하고 싶습니다. 0 3 6,584

by 제임수 [SQL Query] 정규식 SQL [2019.05.21 11:26:36]


안녕하세요.

하나의 컬럼에 콤마(,)로 구분된 문자열에서 중복된 내용을 삭제하고 유니크한 값만 남기고 싶습니다.

예를들어 'image,search,photo,image,photo' 로 입력되어 있는 컬럼값을 --> 'image,search,photo' 만 남기고 싶습니다.

고수님들의 답변 부탁드립니다.

by 랑에1 [2019.05.21 13:24:15]
WITH t(v) AS
(
	SELECT 'image,search,photo,image,photo' FROM dual
)

SELECT LISTAGG(v, ',') WITHIN GROUP(ORDER BY lv, rn) v
FROM 
(
	SELECT v
	     , lv
	     , ROW_NUMBER() OVER(PARTITION BY v ORDER BY lv) rn
	FROM 
	(
		SELECT REGEXP_SUBSTR(t.v, '[^,]+', 1, LEVEL) v, LEVEL lv
		FROM t
		CONNECT BY LEVEL <= REGEXP_COUNT(t.v, ',') + 1
	)
)
WHERE rn = 1

 


by 르매 [2019.05.21 14:58:50]

MySQL

WITH a (id, col) AS (
    SELECT 1, 'image,search,photo,image,photo' UNION ALL
    SELECT 2, 'a,a,b,c,c'
), t (seq) AS (
    SELECT 0 AS seq UNION ALL
    SELECT 1 UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9
)
SELECT a.id, GROUP_CONCAT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(a.col, ',', t.seq + 1), ',', -1))
FROM a
    INNER JOIN t ON t.seq <= LENGTH(a.col) - LENGTH(REPLACE(a.col, ',', ''))
GROUP BY a.id;

MS-SQL 2017

WITH a (id, col) AS (
    SELECT 1, 'image,search,photo,image,photo' UNION ALL
    SELECT 2, 'a,a,b,c,c'
), b (id, col) AS (
	SELECT a.id, t.value
	FROM a
		CROSS APPLY STRING_SPLIT(a.col, ',') t
	GROUP BY a.id, t.value
)
SELECT id, STRING_AGG(col, ',')
FROM b
GROUP BY id;

 


by 제임수 [2019.05.22 10:29:55]

두분다 감사합니다.

제가 확인하는 환경이 오라클인지라 랑에1님 가이드대로 적용해서 원하는 결과를 얻었습니다.

감사합니다~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입