Anmelden

View Full Version : HTML-Code per SQL aus DB-Feld entfernen



schwatzen
17-01-17, 16:19
Hallo *all,

ich möchte verschiedene HTML-Befehle innerhalb eines Text-Feldes per SQL entfernen. Ein REPLACE fällt wegen der fehlenden generischen Möglichkeit wohl aus. Zudem sollte das bereinigte Feld bereits in der Feldliste der SELECT Anweisung enthalten sein, da die Daten innerhalb eines Reporting-Tool aufgerufen werden. Ein UPDATE fällt also auch aus.

Kann man irgendwie die Zeichen zwischen "<" und ">" (bzw. incl. der <>) bereits beim SELECT entfernen?

Besten Dank im Voraus für etwaige Vorschläge.

Thomas.

Fuerchau
17-01-17, 17:11
Sind die HTML-Codes genau bekannt, kannst du dies nur per geschachteltem REPLACE durchführen:
replace(replace(TextFeld, HTML-Code, ''), HTML-Code, '')...

Da es viele HTML-Codes gibt, ist das eher unzuverlässig. Hier bietet sich dann eine selbstgestrickte UDF an, die dann z.B. in ILERPG den String vom HTML befreit.

Rainer Ross
17-01-17, 23:02
Hallo,

das geht mit regex_replace
z.B. um für eine Telefonnumer nur die Ziffern zu extrahieren und nicht die übrigen Zeichen sieht es so aus.

SELECT PHONE_NUMBER, REGEXP_REPLACE(PHONE_NUMBER,'[^\d]’,”)
FROM MYTABLE;

+49(1234)-123-1234, 4912341231234

Fuerchau
18-01-17, 07:35
Stimmt, trotzdem müssen in diesm Fall sämtliche entfernbare HTML-Codes aufgelistet werden, dabei ist beim RegEx der Vorteil, falls unterstützt, dass man mittels "(Code1|Code2|...|CodeN)" alle Varianten in einem aufführen muss.
Und wohl dem, der, wieder mal, bereits V7R3 hat.

Robi
18-01-17, 07:46
Moin,
mir fällt dabei POSSTR und Locate ein.
So sattelfest bin ich da nicht, aber damit kannst du doch nach < und > suchen.
zur not mit einem
With a as (select eindeutiger_key, Posstr... as von from ...),
b as (select eindeutiger_key, Posstr... as bis from ...)
select substr(feld, 1, von-1) concat substr(feld, bis+1, ) from datei, a, b, ...

nur als idee

Robi

Fuerchau
18-01-17, 08:24
Ja, ein ähnliches Problem mit Locate habe ich auch gerade gehabt.
Man zerlege ein internes CSV-Feld (4 Werte mit Semikolon getrennt) in seine Bestandteile.
Um das 4. Semicolon zu ermitteln, musst du den Locate 3 Mal verschachteln.
Nun mach das mal mit einem HTML-Document, in dem du den 20. HTML-Code ermitteln willst...

K_Tippi
18-01-17, 08:41
Hallo zusammen.
bei CSV mach ich das über einen (RPG) SCAN (nicht free Format) und als Ergebnis in eine Tabelle,
Dann steht in jedem Element ein Vorkommen des gesuchten Zeichens. Dann den Rest über %SUBST

z.B.
d $v 3s 0 dim(15)

c ';' scan meinfeld $v

%scan im Free Format liefert leider nur das erste Vorkommen

Klaus

Fuerchau
18-01-17, 08:52
%SCAN(search argument : source string {: start})
D.h., durch Angabe der Startposition kann man ebenso das (n)te Vorkommen ermitteln.
Die Array-Funktion des SCAN ist da schon netter, wer weiß, ggf. implementiert die IBM das dann auch noch.

schwatzen
18-01-17, 13:43
Vielen Dank für die Antworten,

ich werde die Anregungen und Hinweise aufnehmen und versuchen umzusetzen.

Thomas