假設
CREATE TABLE myTable(rowID INT IDENTITY(1,1), dupedchars NVARCHAR(4000))
和數據表的定義..
INSERT INTO myTable
SELECT 'aaabbaaacbaaaccc'
UNION
SELECT 'abcdeeeeeffgghhaaabbbjdduuueueu999whwhwwwwwww'
此查詢符合您的標準
WITH Numbers(n)
AS
( SELECT 1 AS n
UNION ALL
SELECT (n + 1) AS n
FROM Numbers
WHERE n < 4000
)
SELECT rowid,
( SELECT CASE
WHEN SUBSTRING(dupedchars,n2.n,1) = SUBSTRING(dupedchars+' ',n2.n+1,1) THEN ''
ELSE SUBSTRING(dupedchars,n2.n,1)
END AS [text()]
FROM myTable t2,numbers n2
WHERE n2.n <= LEN(dupedchars)
AND t.rowid = t2.rowid
FOR XML path('')
) AS deduped
FROM myTable t
OPTION(MAXRECURSION 4000)
輸出
rowid deduped
1 abacbac
2 abcdefghabjdueueu9whwhw
這聽起來像一個家庭作業問題。爲什麼沒有功能? – CResults 2010-03-17 23:03:31
是的,一種測試。但我想檢查一下遞歸「WITH」變體是否可以。 沒有功能,因爲我知道如何實現這個功能。 找到最佳的SQL本機方法非常有用。 – zmische 2010-03-17 23:29:01
我可以添加助手錶嗎?這將是非常小,但有,哦,我不知道,4000行:) – CResults 2010-03-17 23:30:19