如何替换SQL Server中逗号分隔的字符串列中的值

Asw*_*yan 5 database sql-server azure-sql-database azure-sql-server

我有一个逗号分隔值,就像1,2,3,4我的SQL Server数据库中的表中的一列.我想替换逗号分隔字符串中的特定值.即,1,2,3我必须用5替换1和用6替换2.预期的输出是5,6,3.

我将在多行中获得值1和2.所以我需要在所有行中更新它.我有一个表,其中包含要更新的新值(即5 and 6).

简而言之,我有一个表在其中一列中有逗号分隔值,我有另一个包含新值的表.我需要用新值更新逗号分隔值.

Taf*_*ffy 1

WITH cte  AS (SELECT A.*,
  T.pkcolumn, 
                T.column1 
         FROM   table1 AS T 
                CROSS apply String_split(column1, ',') AS A 
         WHERE  column1 = '<oldValue>' 
                 OR column1 LIKE '<oldValue>,%' 
                 OR column1 LIKE '%,<oldValue>,%' 
                 OR column1 LIKE '%,<oldValue>') 
UPDATE Y 
SET    column1 = Stuff((SELECT ',' + CASE WHEN value = '<oldValue>' THEN 
                               '<newValue>' 
                                      ELSE value 
                                                END 
                        FROM   cte t1 
                        WHERE  t1.pkcolumn = t2.pkcolumn 
                        FOR xml path ('')), 1, 1, '') 
FROM   cte t2 
       LEFT OUTER JOIN table1 AS Y 
                    ON Y.pkcolumn = t2.pkcolumn `
Run Code Online (Sandbox Code Playgroud)