2017-03-21 4 views
0

Ich habe Datensätze in einem SQL Server 2005-Datenbank, die so etwas wie dies enthält.SQL Smart ersetzen

longlongLongText###abcdefg###longlongLongText 

(es verschiedene Buchstaben in jedem Datensatz sein kann und vielleicht mehr oder weniger Buchstaben werden, um das Muster ### abcdefg ### ist ein Teil einer langen Zeichenfolge.)

Ich möchte die Datensätze aktualisieren, so dass ich nur die ersten drei Buchstaben behalten werde. Das Ergebnis ist

longlongLongText###abc###longlongLongText 

Ist es möglich?

Danke.

+1

Muss es immer 3 sharps am Anfang und 3 am Ende? – oryol

+0

Ja. Immer 3 ###. –

+2

Ja, es ist möglich. – jarlh

Antwort

0

Versuchen Sie mit diesem:

Ersetzen Sie "col1" durch Ihren Spaltennamen.

update yourtable 
     SET col1 = substring(col1,0,charindex('###',col1)-1)+substring(col1,charindex('###',col1),6)+ substring(col1,CHARINDEX('###',col1,(charindex('###',col1)+1)), (len(col1)-CHARINDEX('###',col1,(charindex('###',col1))))) 

here können Sie sehen und Test

Hoffnung diese Hilfe

1

Macht das was du willst?

select left(str, 6) + '###' 

Oder alternativ:

select '###' + left(replace(str, '#', ''), 3) + '###' 

Dies wird besser funktionieren, wenn es nur ein oder zwei Buchstaben in der Mitte ist.

+1

Wäre es nicht 6 anstatt 7? –

2

Dies sollte funktionieren:

Update YourTable 

Set YourField = left(YourField,CHARINDEX('###', YourField)-1) + substring(YourField, CHARINDEX('###', YourField),6) + right(YourField, len(YourField) - CHARINDEX('###', YourField) - 8) 

where CHARINDEX('###', YourField)>0 

-Die linke Funktion den linken Teil des langen String zurück, bis es erreicht ‚###‘

-Die Teilzeichenfolge Funktion kehrt Start der Teilkette aus das erste '###' und enthält deine ersten 3 Buchstaben.

-der richtige Funktion die richtige String ab dem zweiten Rück '###'

Sie können es hier versuchen: Fiddle

+0

Aber es ist ein Teil einer langen Zeichenfolge. Ich möchte nicht nur die Linke 6 behalten. –

+1

Sie sagten, Sie wollen nur die ersten 3 Buchstaben nach den scharfen Zeichen behalten, also 3 scharfe und 3 Buchstaben ist 6. –

+1

Das stimmt, aber ich sagte auch "Es wird ein Teil einer langen Schnur sein". –

0

einfache Funktion erstellen wie folgt:

create function fnReplaceByPattern(@s varchar(max)) returns varchar(max) 
begin 
    declare @pos int = 1; 
    declare @len int = len(@s); 

    declare @result varchar(max) = ''; 

    while @pos < @len 
    begin 
     declare @start int = charindex('###', @s, @pos); 
     declare @end int = charindex('###', @s, @start + 3); 

     if @start != 0 and @end != 0 
     begin 
      set @result += substring(@s, @pos, @start - @pos + 6) + '###'; 
      set @pos = @end + 3; 
     end 
     else 
     begin 
      set @result += substring(@s, @pos, @len - @pos + 1); 
      set @pos = @len; 
     end 
    end 

    return @result 
end

Und dann verwenden Sie update T1 set Data = dbo.fnReplaceByPattern(Data)