Breaking News
Loading...
07/01/2014

SQL SERVER – Lọc trùng trong 1 chuỗi cách nhau bởi dấu phẩy

Do yêu cầu công việc, tôi cần xử lý nhiều item được nối nhau bởi dấu phẩy thành một chuỗi, và chúng có thể trùng nhau. Tôi cần xử lý lại để nó không trùng.

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

 
Toggle Footer