DB2 SUBSTR

derocco

Lt. Junior Grade
Registriert
Nov. 2015
Beiträge
335
Hi zusammen,

Ich habe in einer DB2 Tabelle in einem CLOB XMLS abgelegt.

Die haben Sektionen die 1...n mal vorkommen und varieren daher in der grösse.
Nun möchte ich den "Core Payload" extrahieren.

Mache ich folgendermassen:

Code:
 (SUBSTRING(ct.DATAXML, (LOCATE('myTextStart',ct.DATAXML)), ((LOCATE( 'myTextEnd', ct.DATAXML)) - (LOCATE('myTextStart">',ct.DATAXML)) )) )

Das Problem ist dass das von der Startpostition immer passt, aber die ENDPOSITION variert.
In einem Fall habe ich nach dem myTextEnd noch 91(!) Zeichen zuviel....

Ich weiss nicht ob es ev irgendwie an Umlauten / Codepage etc liegen kann?
Auffällig ist, dass die von DB2 errechneten Position NICHT mit der Postion des Zeichens in Notepad++ zusammenpassen.
(auch die Startposition nicht aber da klappt es immer)

Ach ja ich habe auch mit INSTR(DATAXML, 'myTextEnd', -1) versucht, wie erwartet selbes Resultat....
meconfused
 
Ich habe noch herausgefunden, dass Umlaute wohl irgendwie DB intern als mehr als 1 Zeichen interpretiert werden....
Entferen ich die, errechnet er eine andere Position, aber BEIDE positionen liegen schon ausserhalb der Doc Grösse in Notepad++
 
Auffallend ist, dass du im ersten und zweiten Teil unterschiedliche Suchstrings verwendest:
LOCATE('myTextStart',
LOCATE('myTextStart">'
 
ich habs endlich gefunden, mehr per Zufall....

Bei SUBSTR kann man keine Codeunits mitgeben, bei SUBSTRING aber schon.

Sobald ich OCTETS als Codeunit angebe klappts!
Ergänzung ()

r0b0t schrieb:
Auffallend ist, dass du im ersten und zweiten Teil unterschiedliche Suchstrings verwendest:
LOCATE('myTextStart',
LOCATE('myTextStart">'
DAs wear ein Typo im Bsp.
 

Ähnliche Themen

Zurück
Oben