Иногда мы сталкиваемся с ситуациями, когда нам нужно удалить дублирующиеся записи из строки, разделенной запятыми, в 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, не стесняйтесь присылать их нам. Мы опубликуем их с вашим именем, давая вам заслуженную кредит.
Спасибо, Ашиш Джайн, за то, что поделились с нами этим полезным скриптом. Мы ценим ваш вклад!