2016-06-29 5 views
1

Ich habe ein Problem.Wie zu bestimmten ersetzen in MsSQL?

Ich möchte alle Spalten ersetzen, die mit 2 beginnen, mit 2 enden und 2 darin enthalten. Zum Beispiel für meine Spalte;

[Numbers]

1, 2, 22, 33, 4, 5

2, 3, 42, 25, 6

12, 28, 62, 2

ich möchte ersetzen "nur 2" (nicht 22 oder 25 etc.) mit X. Hier ist meine Frage:

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,%' 

Aber Ausgabe ist nicht wahr. Dieser Code ersetzt alle 2 in der Spalte mit X.

Kann mir jemand helfen? Wie kann ich eine echte Abfrage schreiben?

+0

Tun Sie sich selbst einen Gefallen und normalisieren Sie Ihre Datenbank. Lesen [Ist das Speichern einer begrenzten Liste in einer Datenbankspalte wirklich so schlimm?] (Http://stackoverflow.com/questions/3653462/is-storing-a-limited-list-in-a-database-column-really-that (Bad), wo die angenommene Antwort im Detail erklärt, warum es so schlecht ist. –

+0

kann ich nicht. Ich habe diese Datenbank nicht erstellt und muss nur modifizieren, wie ich es vorhin gesagt habe. – pseudocode

+0

Was wäre Ihre erwartete Ausgabe basierend auf Ihren gegebenen Daten – StackUser

Antwort

4

Versuchen Sie, diese dann ',' entfernen (erste und Ende)

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, 

Abfrage wie folgt aussieht:

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

Vielen Dank. Es funktionierte. – pseudocode

0

Es ist nur eine Idee ...

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' 
Verwandte Themen