PDA

View Full Version : SQL mit Replace



mk
08-10-09, 12:50
Hallo zusammen,


ich habe ein kleines Problemchen mit dem
ersetzen von Zeichen in einem String.

In dem String sollen variable Werte für
&P1, &P2, &P11 eingesetzt werden


Eingabeparameter

AString = das ist &P1ein &P2 test mit &P11ersetzten
aSearchParm = &P1
aSearchParmVal=Meyer

C/EXEC SQL
C+ set :aString = REPLACE(:AString, :aSearchParm,
c+ :aSearchParmVal)
C/END-EXEC

Ergebnis
das ist Meyerein &P2 test mit Meyer1ersetzten


Der Replace findet also die Zeichenfolge &P1 an den stellen
10-12 und zusätzlich bei 30-32 was ja eigentlich richtig ist.

Allerdings soll der Wert für &P11 nicht ersetzt werden.





Hat jemand eine Idee wie man das lösen könnte ?

Gruß
Michael

Fuerchau
08-10-09, 13:03
Die Frage verstehe ich jetzt so nicht ganz.
Was soll nicht ersetzt werden ?

Ein Problem des Replace gibts auf jeden Fall.
Die Felder aSearchxxx sollten als VARYING definiert sein, da sonst Leerzeichen für das Suchen und ersetzen mit gelten!

mk
08-10-09, 13:29
Hi Baldur,


die Felder sind als vaying definiert.

In meinem Fall ist es so:

der String aString hat drei Ersetzungsvariablen
das ist &P1ein &P2 test mit &P11ersetzten

&P1 , &P2 und &P11

leider ersetzt der replace wenn nach &P1 gesucht wird
auch die Variable &P11.

Ich suche einen Weg das zu verhindern.

Gruß
Michael

Fuerchau
08-10-09, 13:52
Das kann der Replace so nicht, da der String &P1 in &P11 enthalten ist.
Du musst sicherstellen, dass der String eindeutig ist.
Ggf. reicht ja bereits ein Blank aus:

replace(myfield, '&P1 ', 'Wert')

B.Hauser
08-10-09, 14:19
Hallo,

ich würde einfach in umgekehrter Reihenfolge vorgehen, d.h. zuerst &P11 ersetzen und dann &P1.

Birgitta

mk
08-10-09, 14:37
Hallo zusammen,

danke für die Info's.

Ich werde das Programm so umbauen das die Parameter
absteigend verarbeitet werden.

Gruß
Michael