去除聚合字符串中的一个字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yenange/article/details/81940190
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	planId BIGINT PRIMARY KEY,
	dbIds VARCHAR(500)
)
GO
---- 插入测试数据 -------
---- 要求:去除dbIds中的 12456 
INSERT INTO t VALUES (1,'12345,67890,23456,98723')
INSERT INTO t VALUES (2,'12345,67890,12456,98723')
INSERT INTO t VALUES (3,'12345,67891,12456,98723')
INSERT INTO t VALUES (4,'12345,67891,12456')
GO
IF OBJECT_ID('[dbo].[Fun_Split]') IS NOT NULL DROP FUNCTION [dbo].[Fun_Split]
GO
-- =============================================
-- Author     :	yenange
-- Create date: 2014-03-04
-- Description:	切分字符串
-- Example    : SELECT * FROM [dbo].[Fun_Split]('a,b,d,c',',')
-- =============================================
CREATE FUNCTION [dbo].[Fun_Split]  
(  
    @str    NVARCHAR(MAX),  
    @split  NVARCHAR(MAX)  
)
RETURNS @table TABLE ([id] NVARCHAR(max))
AS
BEGIN
    IF LEN(@split) = 0
      BEGIN
        SET @split = N','
      END
 
    DECLARE @xml XML;
    SET @xml = CONVERT(XML, '<x><![CDATA[' + replace(CONVERT(VARCHAR(MAX), @str), @split, ']]></x><x><![CDATA[') + ']]></x>')
 
    INSERT INTO @table
      SELECT item
      FROM   (SELECT c.value('text()[1]', 'nvarchar(4000)') [item]
              FROM   @xml.nodes('/x') t(c)) t
      WHERE  item IS NOT NULL
 
    RETURN
END
GO


------ 更新操作 ---------
;WITH cte AS (
	SELECT *
		,STUFF((
			SELECT ','+f2.id 
			FROM dbo.Fun_Split(t.dbIds,',') f2 
			WHERE f2.id!='12456'
			FOR XML PATH('') 
		),1,1,'') AS dbIds2
	FROM t WHERE EXISTS(
		SELECT 1 FROM dbo.Fun_Split(t.dbIds,',') fs 
		WHERE fs.id='12456'	
	)
)
UPDATE a 
SET a.dbIds=b.dbIds2
FROM t AS a INNER JOIN cte AS b ON a.planId=b.planId

------- 查看结果 ---------
--12456 已经去除
SELECT * FROM t
/*
planId               dbIds
-------------------- ------------------------
1                    12345,67890,23456,98723
2                    12345,67890,98723
3                    12345,67891,98723
4                    12345,67891
*/

猜你喜欢

转载自blog.csdn.net/yenange/article/details/81940190
今日推荐