2016-12-08 6 views
0

Ich habe Tausende von Zeichenfolgen, die Daten enthält und mit IDs, die mit einem "@xx" markiert ist. Wenn die Zeichenfolge ein '|' Es bedeutet, dass mehr Daten mit einer ID vorhanden sind.Teil der Zeichenfolge in SQL ersetzen

Wie finde und ersetze ich alle IDs, die eine bestimmte ID enthalten? Wenn ich @ 1 ändern möge @ 24 Ich will nicht @ 11- Einige beispiele mit dem erwarteten Ausgang @ 241

geändert werden:

[email protected] -> [email protected] 
[email protected] -> [email protected] 
[email protected]|[email protected]|[email protected] -> [email protected]|[email protected]|[email protected] 

ersetzen (Spalte ‚@ 1‘ , '@ 24') funktioniert nicht, weil @ 11 zu @ 241 geändert wird. Also muss ich wissen, ob es das Ende der Zeichenfolge ist oder ob es mit einem '|'

+0

zeigen Sie Ihre erwartete Ausgabe – TheGameiswar

+0

Ich habe es mit der erwarteten Ausgabe bearbeitet – thatsIT

Antwort

2

Schnell und schmutzig aber man konnte nur etwas tun:

-- Update the end bits 
UPDATE table 
SET field = LEFT('field', LEN('field') -2) + '@24' 
WHERE field LIKE '%@1'; 

-- Update the in between bits 
UPDATE table 
SET field = REPLACE(field, '@1|', '@24|') 
WHERE field LIKE '%@1|%'; -- This where statement is optional due to the nature of the REPLACE. 

Sonst wirst du in die aussehen müssen magische Welt von REGEX. Wenn das etwas ist, das Sie mehr als einmal ausführen möchten, würde ich mir das sicherlich ansehen. Wenn das nur ein einmaliges Fix-Ding ist, meh. Es ist Donnerstag, ich würde es eine gültige Entschuldigung nennen.

1

Versuchen Sie, diese

declare @t table(col varchar(100)) 
insert into @t 
select '[email protected]' union all 
select '[email protected]' union all 
select '[email protected]|[email protected]|[email protected]' 


select col,case when new_col like '%|' then 
       substring(new_col,1,len(new_col)-1) 
      else 
       new_col end as new_col 
from 
(
select col, 
case when col+'|' like '%@1|%' then 
Replace(col+'|', '@1|', '@24|') else col end as new_col 
from @t 
) as t 

Ergebnis

col           new_col 
--------------------------------------------- ------------ 
[email protected]         [email protected] 
[email protected]         [email protected] 
[email protected]|[email protected]|[email protected] [email protected]|[email protected]|[email protected] 
+1

Was ist mit den Strings mit mehreren '|' abgegrenzten Abschnitten, jede mit ihren eigenen '@ xx' Wert? Oder wurde diese Änderung hinzugefügt, nachdem Sie geantwortet haben? – 3N1GM4

+0

Nein, es wurde nicht bearbeitet – thatsIT

+0

Was passiert, wenn einer der mittleren '' 1 | '' enthält? Würde das nicht dazu führen, dass das '|' in der Mitte entfernt wird? – Jens

Verwandte Themen