Wie zu ersetzen, die mehr als einen Charakter in oracle?
Gewusst wie: ersetzen Sie mehrere ganze Figuren, mit Ausnahme derjenigen, die Kombinationen...?
Den folgenden code ersetzt mehrere Zeichen, aber es stören auch diejenigen, die in Kombinationen.
SELECT regexp_replace('a,ca,va,ea,r,y,q,b,g','(a|y|q|g)','X') RESULT FROM dual;
Aktuellen Ausgabe:
RESULT
--------------------
X,cX,vX,eX,r,X,X,b,X
Erwartete Ausgabe:
RESULT
------------------------
'X,ca,va,ea,r,X,X,b,X
Ich will einfach nur den Austausch von separaten ganzen Zeichen('a','y','q','g'), aber nicht die 1 in Kombinationen('ca','va','ea')...
Verwenden Sie verschachtelte replace und wenn Sie möchten, ersetzen Sie nur ein Zeichen, das Sie ersetzen können ',' mit 'x' statt 'ein'.
Mit verschachtelten ersetzen auch ersetzen das 'a' in Kombinationen., Aber ich möchte einfach nur den Austausch von separaten, 'a', außer in Kombinationen...
Mit verschachtelten ersetzen auch ersetzen das 'a' in Kombinationen., Aber ich möchte einfach nur den Austausch von separaten, 'a', außer in Kombinationen...
InformationsquelleAutor Vicky | 2015-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil Sie die Abgrenzung durch ein Komma',', die Sie kombinieren können, wie ',a,'
und dieser ersetzt nur eine einzige ein.
Satav: Das ist leicht; Sie würden fügen Sie ein Komma vor und beenden und entfernen Sie Sie wieder nach dem auftragen der ersetzen-operation.
Kettner - habe es, prost
InformationsquelleAutor SubqueryCrunch
können Sie versuchen folgt:
InformationsquelleAutor HAYMbl4
Leider in oracle nicht unterstützt lookahead und lookbehind. Aber dies ist eine Lösung, die ich kam mit.
Musste ich die regexp doppelt traurig, da es nicht zwei ähnliche Werte nach einander und zu ersetzen.
..,a,y,..
wird immer ersetzt, wie..,X,y,..
. So wird der zweite Aufruf ersetzt die fehlende [ayqg] mit den exakten Werten. In der ersten inneren regexp-Aufruf ersetzt die erste und Letzte Werte.Vielleicht könnte dies vereinfacht werden, in einem Ausdruck, aber ich bin nicht so konform mit der regex von oracle.
Als Erklärung, ich bin die Gruppierung der commata und im Grunde ersetzen Sie jedes
,[ayqg],
mit,X,
durch für rückreferenzierung der commataInformationsquelleAutor SomeJavaGuy
Würden Sie Blick für Wortgrenzen, \b, und die wird leider nicht unterstützt von der Oracle regexp_replace.
Also schauen wir uns für eine nicht-Wort-Zeichen, \W oder Anfang ^ oder Ende $ der text.
Um nicht entfernen Sie die nicht-Wort-Zeichen, wir müssen Sie in den ersetzen-string: \1 für den Ausdruck in der ersten parenteses, \3 für diejenigen, die in der Dritten. Damit wir nur ändern Sie den Ausdruck in der zweiten Klammern, was ist a, y, q und g mit X.
Leider oben gibt
Q wurde nicht ersetzt, weil wir wissen,', y,' so positioniert sein, ein 'g' in der Erwägung, dass wir hätten positioniert werden müssen ',g' zu erkennen g als ein Wort, auch.
Also müssen wir ersetzen in Iterationen (D. H. rekursiv):
EDIT: Kevin Esche ist richtig; natürlich muss man es nur zweimal. Daher können Sie auch tun:
InformationsquelleAutor Thorsten Kettner
Diese Aussage schwenkt die Daten in Zeilen und ersetzt nur Linien wich enthält ein Zeichen.
Daten sind dann unpivoted in einem Zeilen
InformationsquelleAutor Kobi
Dieses sql funktioniert auch mit leeren Einträge wie "a, b,c' und komplexere reguläre Ausdrücke:
Ergebnis
InformationsquelleAutor Frank Ockenfuss
Weiß nicht viel Oracle, aber ich hätte gedacht, dass so etwas funktionieren könnte. Angenommen das Trennzeichen ist immer ein Komma.
Den ersten beiden teilen ersetzt ein einzelnes Zeichen in Komma in der Mitte, der Dritte Teil bekommt wer am Anfang der Zeichenfolge, die vierte ist für das Ende der Zeichenfolge, und der fünfte ist, wenn dann die saite hat nur einen Charakter.
Diese Antwort könnte sein simplifiable durch erweiterte Regexp verwenden.
InformationsquelleAutor Athos Athanasiou