Ví dụ tôi có một chuỗi là "aa, bb, cc, aa, dd". Tôi cần chuỗi cuối cùng là "aa, bb, cc, dd". Chuỗi "aa" bị trùng sẽ được gôm lại thành một.
Sau một lúc tìm kiếm, tôi tìm thấy tác giả Pinal Dave đã đưa ra một giải pháp, ông viết ra 1 SQL function và vấn đề của tôi đã được giải quyết.
Đoạn script của ông như sau:
CREATE FUNCTION dbo.DistinctList ( @List VARCHAR(MAX), @Delim CHAR ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @ParsedList TABLE ( Item VARCHAR(MAX) ) DECLARE @list1 VARCHAR(MAX), @Pos INT, @rList VARCHAR(MAX) SET @list = LTRIM(RTRIM(@list)) + @Delim SET @pos = CHARINDEX(@delim, @list, 1) WHILE @pos > 0 BEGIN SET @list1 = LTRIM(RTRIM(LEFT(@list, @pos - 1))) IF @list1 <> '' INSERT INTO @ParsedList VALUES (CAST(@list1 AS VARCHAR(MAX))) SET @list = SUBSTRING(@list, @pos+1, LEN(@list)) SET @pos = CHARINDEX(@delim, @list, 1) END SELECT @rlist = COALESCE(@rlist+';','') + item FROM (SELECT DISTINCT Item FROM @ParsedList) t RETURN @rlist END GO SELECT dbo.DistinctList('342,34,456,34,3454,456,aa,bb,cc,aa',',') DistinctList GO
Và đây là kết quả:
Tham khảo: http://blog.sqlauthority.com/2009/01/15/sql-server-remove-duplicate-entry-from-comma-delimited-string-udf/
0 comments:
Post a Comment