Published on

January 5, 2009

Удаление дублирующихся записей из строки, разделенной запятыми, в SQL Server

Иногда мы сталкиваемся с ситуациями, когда нам нужно удалить дублирующиеся записи из строки, разделенной запятыми, в SQL Server. Это может быть трудной задачей, если делать это вручную, но к счастью, есть простое решение с использованием пользовательской определенной функции (UDF).

Один из наших читателей блога, Ашиш Джайн, предоставил скрипт, который эффективно удаляет дублирующиеся записи из строки, разделенной запятыми. UDF принимает входную строку и преобразует ее в таблицу. Затем он выполняет операцию DISTINCT на таблице, чтобы удалить любые дублирующиеся значения. Наконец, он преобразует таблицу обратно в строку, которую можно использовать по желанию.

Вот модифицированная версия UDF:

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', ',') AS DistinctList
GO

Эта UDF может быть полезным инструментом, когда вам нужно удалить дублирующиеся записи из строки, разделенной запятыми. Просто вызовите функцию с входной строкой и разделителем, и она вернет измененную строку с удаленными дублирующимися записями.

Мы призываем наших читателей вносить свои собственные скрипты и решения. Если у вас есть какие-либо скрипты или идеи, связанные с SQL Server, не стесняйтесь присылать их нам. Мы опубликуем их с вашим именем, давая вам заслуженную кредит.

Спасибо, Ашиш Джайн, за то, что поделились с нами этим полезным скриптом. Мы ценим ваш вклад!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.