关于数据库某字段中是以逗号分割的数据,去除重复有关问题
关于数据库某字段中是以逗号分割的数据,去除重复问题
现表中某字段是逗号分隔数据,如
表A
id name
1,2,3,3,4,5 哈
如何实现去除id中的重复,实现修改id为1,2,3,4,5
------解决思路----------------------
现表中某字段是逗号分隔数据,如
表A
id name
1,2,3,3,4,5 哈
如何实现去除id中的重复,实现修改id为1,2,3,4,5
------解决思路----------------------
--1. 初始数据
IF OBJECT_ID('dbo.A','U') IS NOT NULL
DROP TABLE dbo.A
GO
CREATE TABLE dbo.A (
rowNum INT IDENTITY(1,1) PRIMARY KEY, --一定要加主键, 没有主键什么都不好做.
id VARCHAR(MAX),
[name] NVARCHAR(50),
)
INSERT INTO dbo.A (id,name) VALUES('1,2,3,3,4,5','哈')
INSERT INTO dbo.A (id,name) VALUES('1,2,2,3,4,5','哈2')
--输出处理前的表
SELECT * FROM dbo.A
--2.循环更新每一行
DECLARE @i INT,@iMax INT,@id VARCHAR(MAX)
SELECT @i= ISNULL(MIN(rowNum),1) ,@iMax = ISNULL(max(rowNum),0) FROM dbo.A
WHILE @i<=@iMax
BEGIN
SELECT @id = id FROM dbo.A WHERE rowNum = @i
UPDATE dbo.A SET id=
(SELECT STUFF(
(
SELECT ',' + y.id FROM (
SELECT [value] = CONVERT(XML,'<v>' + REPLACE(@id, ',', '</v><v>')+ '</v>')
) x
OUTER APPLY(
SELECT id = N.v.value('.', 'nvarchar(max)') FROM x.[value].nodes('/v') N(v)
) y
WHERE ISNULL(y.id, '') != ''
GROUP BY y.id
FOR XML PATH('')
),1,1,''))
WHERE rowNum =@i
SET @i=@i+1
END
--输出处理过的表
SELECT * FROM dbo.A