주어진 테이블의 열에서 반복되는 문자열을 제거하고 싶습니다.SQL Server에서 반복 문자열 제거
다음은 몇 가지 예는 다음과 같습니다
Input | Expected Output
---------------------------
XYXY | XY
AA | A
XYZXYZ | XYZ
ABCABCABC | ABC
내가 그것을 어떻게 할 수 있습니까?
주어진 테이블의 열에서 반복되는 문자열을 제거하고 싶습니다.SQL Server에서 반복 문자열 제거
다음은 몇 가지 예는 다음과 같습니다
Input | Expected Output
---------------------------
XYXY | XY
AA | A
XYZXYZ | XYZ
ABCABCABC | ABC
내가 그것을 어떻게 할 수 있습니까?
출력을 얻으려면 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
좋은 답변이지만, 대부분의 비 의도적 인 예를 망가 뜨립니다. 'Jamiea'의 입력을 시도해보십시오. 반복되는'a'가 있지만 출력을 mangles합니다. 위의 의견에서 예상 한 바와 같이, OP는이 질문에 적절하게 대답하기에 충분한 정보를 제공하지 않았습니다. 모든 OP의 예는 알파벳 순이었습니다. 현실 세계가 너무 균일하지 않다고 생각합니다. – Jamiec
@Jamiec - 예, 당신이 그것에 대해 연구 중입니다. –
이 쿼리가 당신에게 도움이 될 것입니다.
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
다른 최적화 된 방법을 찾으셨습니까? –
당신은 정말 구체적인 질문을하지 않았습니다 ... 지금까지 시도 것을 :
기능 중복 문자열을 제거하려면? –
정말이 질문은 upvote 자격이됩니까? – Wanderer
@ Ullas : 그렇게 생각합니다. 나는 그것이 흥미있는 것을 안다. 나에게 그것은 분명하고 그것에 대한 대답을보고 싶다. –