2016-06-29 4 views
1

私は問題があります。MsSQLの特定の置換方法は?

2で始まり2で終わり、2が内側になるすべての列を置き換えたいとします。 たとえば、私の列の場合。

[番号]

1、2、22、33、4、5

2、3、42、25、6

12、28、62、2

私はここではXで(ない22や25など) "のみ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,%' 

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

しかし出力は真ではありません。このコードは、列の2つをXで置き換えます。

誰でも手伝ってください。真のクエリを書くにはどうすればいいですか?以下のよう

+0

は自分を支持していますデータベースを正規化します。 [データベース列に区切られたリストを格納するのは本当に悪いですか?](http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that -bad)ここで受け入れられた答えはなぜそれが悪いのかを詳しく説明しています。 –

+0

できません。私はこのデータベースを作成していないので、私が今言ったようにただ変更するだけです。 – pseudocode

+0

あなたの与えられたデータに基づいて期待される出力はどれでしょうか – StackUser

答えて

4

(最初と最後)','を削除し、その後、これを試してみてください

SELECT REPLACE(',' + REPLACE('1, 2, 22, 33, 4, 5', ' ', '') + ',', ',2,', ',X,') -- ,1,X,22,33,4,5, 
SELECT REPLACE(',' + REPLACE('2, 3, 42, 25, 6', ' ', '') + ',', ',2,', ',X,') -- ,X,3,42,25,6, 
SELECT REPLACE(',' + REPLACE('12, 28, 62, 2', ' ', '') + ',', ',2,', ',X,') -- ,12,28,62,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 
+0

ありがとうございました。出来た。 – pseudocode

0

...

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' 
関連する問題