如何在MsSQL中进行特定替换?

如何在MsSQL中进行特定替换?,sql,sql-server,replace,Sql,Sql Server,Replace,我有个问题 我想替换所有以2开头、以2结尾、内部包含2的列。 例如我的专栏 [数字] 1,2,22,33,4,5 2,3,42,25,6 12,28,62,2 我想将“仅2”(不是22或25等)替换为X。以下是我的问题: UPDATE mytable set Numbers = replace(Numbers, ',2', ',X') WHERE Numbers like '%,2' UPDATE mytable set Numbers = replace(Numbers, ',2,'

我有个问题

我想替换所有以2开头、以2结尾、内部包含2的列。 例如我的专栏

[数字]

1,2,22,33,4,5

2,3,42,25,6

12,28,62,2

我想将“仅2”(不是22或25等)替换为X。以下是我的问题:

UPDATE mytable
set Numbers = replace(Numbers, ',2', ',X') WHERE Numbers like '%,2'

UPDATE mytable
    set Numbers = replace(Numbers, ',2,', ',X,') WHERE Numbers like '%,2,%'

UPDATE mytable
    set Numbers = replace(Numbers, '2,', 'X,') WHERE Numbers like '2,%'
但结果并非如此。此代码将列中的所有2替换为X


有人能帮我吗?如何编写真正的查询?

尝试此操作,然后删除
,“
(第一个和第二个)

查询如下所示:

UPDATE mytable
SET Numbers = SUBSTRING(NewNumbers, 2, LEN(NewNumbers) - 2)
FROM
(
    SELECT 
       Id, 
       REPLACE(',' + REPLACE(Numbers, ' ', '') + ',', ',2,', ',X,')  AS NewNumbers
    FROM
        mytable
) A
WHERE
    mytable.Id = A.Id
    -- Your where clause

尝试此操作,然后删除
,“
(第一个和第二个)

查询如下所示:

UPDATE mytable
SET Numbers = SUBSTRING(NewNumbers, 2, LEN(NewNumbers) - 2)
FROM
(
    SELECT 
       Id, 
       REPLACE(',' + REPLACE(Numbers, ' ', '') + ',', ',2,', ',X,')  AS NewNumbers
    FROM
        mytable
) A
WHERE
    mytable.Id = A.Id
    -- Your where clause
这只是一个想法

UPDATE mytable
set Numbers = 'X,'+substring(Numbers,3) WHERE Numbers like '2,%'

UPDATE mytable
    set Numbers = replace(Numbers, ',2,', ',X,') WHERE Numbers like '%,2,%'

UPDATE mytable
    set Numbers = substring(Numbers,1,LENGTH(Numbers)-2)+',X' WHERE Numbers like '%,2' 
这只是一个想法

UPDATE mytable
set Numbers = 'X,'+substring(Numbers,3) WHERE Numbers like '2,%'

UPDATE mytable
    set Numbers = replace(Numbers, ',2,', ',X,') WHERE Numbers like '%,2,%'

UPDATE mytable
    set Numbers = substring(Numbers,1,LENGTH(Numbers)-2)+',X' WHERE Numbers like '%,2' 

帮你自己一个忙,规范化你的数据库。阅读被接受的答案详细解释了为什么那么糟糕。我不能。我没有创建这个数据库,我只需要像我现在所说的那样进行修改;我需要得到这个[X,3,42,25,6],而不是[2,3,42,25,6],但是输出是[X,3,4X,25,6],对于输入[1,2,22,33,4,5],输出应该是[1,X,22,33,4,5]?帮个忙,规范化数据库。阅读被接受的答案详细解释了为什么那么糟糕。我不能。我没有创建这个数据库,我只需要像我现在所说的那样进行修改;我需要得到这个[X,3,42,25,6],而不是[2,3,42,25,6],但是输出是[X,3,4X,25,6],对于输入[1,2,22,33,4,5],输出应该是[1,X,22,33,4,5]?