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

时间:2018-09-24 07:27:12

标签: sql-server database azure-sql-database azure-sql-server

我的SQL Server数据库的表中的一列中有一个逗号分隔的值,例如npm install babel-core babel-loader --save-dev 。我想替换逗号分隔的字符串中的特定值。即从1,2,3,4起,我必须将5替换为1,将6替换为2。预期的输出为1,2,3

我将在多行中分别具有值1和2。因此,我需要在所有行中对其进行更新。我有一个表,其中包含要更新的新值(即5,6,3)。

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

4 个答案:

答案 0 :(得分:2)

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 `

答案 1 :(得分:0)

您可以使用类似这样的功能将行中的逗号分隔值移动到新表中;

try...except ImportError:

然后您可以更新,但是您想更新它们。

我会保留该表并删除该列。.但是,如果基础结构太晚或更改太迟,则可以将其更新回表。

答案 2 :(得分:0)

declare @str varchar(20) = '1,2,3,4,5,6'

select REPLACE(replace(@str, '1', '5'), '2', '6')
--replace 1 with 5 and 2 with 6

答案 3 :(得分:-1)

您可以使用

之类的查询
select REPLACE(REPLACE([Value], 1, 5), 2, 6) 
from TestTable

并插入到新的表格列中。

但这仍然取决于您的要求。

谢谢。