PDA

View Full Version : SQL update mit substr



Pmartsch
06-11-07, 08:30
Hallo,

ich versuche mit Sql einen Teilbereich eines Feldes zu verändern. Leider funktioniert mein SQL Befehl nicht mehr. Gibt es eine Änderung mit Rel. V5R4M0

update cptfil/Rech set substr(thcmt, 30, 1) = '®'
WHERE substr(Thcmt, 30, 1) <> '®' and
TTDTE between 20070707 and 20070708

Fehlermeldung: Token ( ungültig. Gültige Token: =.

Kann mir jemand weiterhelfen?
Vielen Dank.
Petra

Fuerchau
06-11-07, 08:33
update cptfil/Rech set thcmt = substr(thcmt, 1, 29) concat '®' concat substr(thcmt, 31, restlänge)
WHERE substr(Thcmt, 30, 1) <> '®' and
TTDTE between 20070707 and 20070708

FNeurieser
02-09-11, 08:42
Guten Morgen Fuerchau,

ich habe eine Frage zu dem SQL-Update mit Teilstring:

Ich muss einen Teilstring eines Feldes mit 1341 Satzlänge updaten und zwar lediglich ab der 2. Stelle mit einer Länge von 3.

Genauer gesagt sollte ab der 2. Stelle des Strings '001' anstelle von '000' stehen. Hier das was ich probiert habe:

B000RWL20110901165200
B000RWL20110901165200
K000RWL20110901165200

update testfgn/fbbijet896 set bijet = substr(bijet, 3, 1) concat '001' concat substr(bijet, 4, 1337) where substr(bijet, 2, 3) = '000'

dabei überschreibt er aber die ersten 4 Stellen und das Ergebnis sieht so aus:

00010RWL20110901165200
00010RWL20110901165200
00010RWL20110901165200

was mache ich bitte falsch?


Danke, habe den Fehler soeben gefunden. Es muss richtig lauten:

update testfgn/fbbijet896 set bijet = substr(bijet, 1, 1) concat '001' concat substr(bijet, 5, 1337) where substr(bijet, 2, 3) = '000'

bateau
02-09-11, 14:43
Moien,

seit V5R3 (oder V5R4?) geht das auch ein wenig einfacher mit der neuen INSERT Funktion (Auszug aus der SQL Reference) :

INSERT ( source-string , start , length , insert-string )

Returns a string where length characters have been deleted from source-string beginning at start and where insert-string has been inserted into source-string beginning at start.

In deinem konkreten Beispiel wäre demnach das hier richtig :

update testfgn/fbbijet896 set bijet = insert(bijet, 2, 3, '001')
where substr(bijet, 2, 3) = '000'

Grüsse und schönes Wochenende

-Martin

Fuerchau
02-09-11, 16:15
Da ist wohl ein kleiner Rechenfehler:

update testfgn/fbbijet896 set bijet = substr(bijet, 1, 1) concat '001' concat substr(bijet, 5, 1337) where substr(bijet, 2, 3) = '000'

FNeurieser
02-09-11, 17:39
@Fuerchau,

guten Abend,

Sie schrieben:

Da ist wohl ein kleiner Rechenfehler:

update testfgn/fbbijet896 set bijet = substr(bijet, 1, 1) concat '001' concat substr(bijet, 5, 1337) where substr(bijet, 2, 3) = '000'

und siehe da, genau das habe ich kurz nach Fragestellung gemacht und deshalb auch meinen Thread editiert.

Aber noch mal rech herzlichen Dank, dieses Forum ist wirklich einmalig, man erhält prompt Unterstützung (Achtung - nicht ironisch gemeint - sondern wirklich sehr dankbar)

@Martin
Danke, werde dies am Montag auch noch probieren. Wußte nicht das es so einfach gehen soll.

Fuerchau
02-09-11, 17:44
Jo stimmt, ich habe da nicht weitergelesen :).