2014-10-30 5 views
4

주어진 테이블의 열에서 반복되는 문자열을 제거하고 싶습니다.SQL Server에서 반복 문자열 제거

다음은 몇 가지 예는 다음과 같습니다

Input  | Expected Output 
--------------------------- 
XYXY  | XY 
AA  | A 
XYZXYZ | XYZ 
ABCABCABC | ABC 

내가 그것을 어떻게 할 수 있습니까?

+2

당신은 정말 구체적인 질문을하지 않았습니다 ... 지금까지 시도 것을 :

기능 중복 문자열을 제거하려면? –

+0

정말이 질문은 upvote 자격이됩니까? – Wanderer

+2

@ Ullas : 그렇게 생각합니다. 나는 그것이 흥미있는 것을 안다. 나에게 그것은 분명하고 그것에 대한 대답을보고 싶다. –

답변

1

출력을 얻으려면 3 가지 로직을 사용하십시오.

우선

CTE

둘째 다음 단계에서 사용되는 CTE 내부 각 행 row_number() 데 사용되는 각 행의 고유 글자를 찾는 것이다.

제 3의은 제 2 단계에서 생성 된 concatenate the rows using group by row_number()이다.

CREATE TABLE #input 
    (name VARCHAR(50)) 

INSERT INTO #input 
VALUES  ('XYXY'), 
      ('AA'), 
      ('XYZXYZ'), 
      ('ABCABCABC'); 

WITH cte 
    AS (SELECT Row_number()OVER (ORDER BY name) rn, 
       Substring(name, 1, 1) AS sub, 
       1      AS IDX, 
       name 
     FROM #input 
     WHERE Len(name) > 0 
     UNION ALL 
     SELECT rn,Substring(name, IDX + 1, 1) AS sub, 
       IDX + 1      AS IDX, 
       name 
     FROM cte 
     WHERE IDX < Len(name)) 
SELECT name INPUT, (SELECT DISTINCT CONVERT(VARCHAR(100), sub) 
       FROM cte b 
       WHERE b.rn = a.rn 
       FOR XML PATH('')) EXPECTED_OUTPUT 
FROM cte a 
GROUP BY rn ,name 

OUTPUT

INPUT  EXPECTED_OUTPUT 
--------- --------------- 
AA   A 
ABCABCABC ABC 
XYXY  XY 
XYZXYZ  XYZ 
+0

좋은 답변이지만, 대부분의 비 의도적 인 예를 망가 뜨립니다. 'Jamiea'의 입력을 시도해보십시오. 반복되는'a'가 있지만 출력을 mangles합니다. 위의 의견에서 예상 한 바와 같이, OP는이 질문에 적절하게 대답하기에 충분한 정보를 제공하지 않았습니다. 모든 OP의 예는 알파벳 순이었습니다. 현실 세계가 너무 균일하지 않다고 생각합니다. – Jamiec

+0

@Jamiec - 예, 당신이 그것에 대해 연구 중입니다. –

5

이 쿼리가 당신에게 도움이 될 것입니다.

SELECT dbo.RemoveDuplicate (ColumnName, VariableLength) FROM TableName.

예 : SELECT dbo.RemoveDuplicate (StudentName, 20) FROM Students.

CREATE FUNCTION RemoveDuplicate (@sInputString AS VARCHAR(10), @nLength AS INT) 
RETURNS VARCHAR(Max) AS 
BEGIN 
    DECLARE @count INT 
    DECLARE @new_string VARCHAR(Max) 
    SET @count=1 
    WHILE (@count <= @nLength) 
     BEGIN 
      IF (@new_string IS NULL) 
      BEGIN 
       SET @new_string='' 
      END 
      SET @[email protected]_string + Substring(@sInputString, 1, 1) 
      SET @sInputString=REPLACE(@sInputString, Substring(@sInputString, 1, 1), '') 
      SET @[email protected] + 1 
     END 
    RETURN @new_string 
END 
+0

다른 최적화 된 방법을 찾으셨습니까? –