我想刪除給定表格列中的重複字符串。刪除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
我該怎麼辦呢?
使用三個邏輯來獲得輸出。
首先通過使用CTE
二由具有row_number()
對於內CTE的每一行,這將在下一步驟中使用查找每行中不同的字母。
第三是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
輸出
INPUT EXPECTED_OUTPUT
--------- ---------------
AA A
ABCABCABC ABC
XYXY XY
XYZXYZ XYZ
很好的答案,但是破壞了大多數非人爲的例子。嘗試'Jamiea'的輸入,它有一個重複的'a',但它破壞了輸出。正如上述意見所預期的那樣,OP沒有提供足夠的信息來正確回答這個問題。所有的OP的例子都是按字母順序排列的,我懷疑現實世界並不是那麼統一的 – Jamiec 2014-10-30 12:40:27
@Jamiec - 你是禮拜儀式我正在努力。 – 2014-10-30 12:50:21
這個查詢將有助於你。
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
您是否找到其他優化方式? – 2014-11-07 14:29:44
你還沒有真正問一個具體問題...你嘗試過這麼遠嗎? – 2014-10-30 11:18:33
真的這個問題值得讚賞嗎? – Wanderer 2014-10-30 11:25:54
@Ullas:我認爲是。我覺得它很有趣。對我來說很明顯,我希望看到一個答案。 – 2014-10-30 11:28:50