Umwandlung der Funktion von oracle zu postgreSQL
Arbeite ich an der Umwandlung etwas, das von Oracle auf PostgreSQL. In der Oracle-Datei gibt es eine Funktion:
instr(string,substring,starting point,nth location)
oder, wie es in meiner Datei
instr(string,chr(10),instr(string,substring),1)
In PostgreSQL diese nicht vorhanden, also habe ich mir eine entsprechende Funktion. Ich fand:
position(substring in string)
aber nicht erlaubt, die Start-position und der N-TEN Lage-Parameter.
Gibt es trotzdem zu machen mit dieser Funktion starten Sie an einem bestimmten Punkt? Oder gibt es eine bessere Funktion zu verwenden, in der PostgreSQL-wo kann ich angeben, die Start-position und der N-TEN Lage?
Diese arbeiten würden auf PostgreSQL 8.2.15, denn das ist die version, die wir laufen über die Datenbank.
- Es ist
substring(string [from int] [for int])
wenn müssen Sie arbeiten, auf einen Teil des Strings. Vielleicht gibt es einfachere Lösung, aber Sie zeigen nicht, uns Ihren input oder erwartete Ausgabe. - Sind Sie sicher, version 8.2.15? 8.2 ist EOL seit Dezember 2011, und Sie sind auch die fehlenden 8 minor-Versionen: Die neueste version 8.2 wurde 8.2.23. Ihre version hat viele ernsthafte (Sicherheits -) Probleme. Tun Sie sich selbst einen gefallen und ein upgrade auf eine aktuelle version so bald wie möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Funktion
strpos(str, sub)
in Postgres ist das äquivalent voninstr(str, sub)
in Oracle.Leider funktioniert die Funktion nicht haben der Dritte und der vierte Parameter, so dass der Ausdruck in Postgres muss komplexer sein.
Die Funktion
substr(str, n)
gibt einen Teilstringstr
abn
position.Als
instr()
ist eine leistungsstarke Funktion, die ich schrieb es in plpgsql für meine eigenen Bedürfnisse.Einige Prüfungen (Beispiele aus OLAP DML-Funktionen):
Gibt es keine
reverse()
Funktion in Postgres 8.2. Sie können dieses verwenden:Die einfachste form:
Mit einem
position
parameter:Für eine positive
position
Wert:Für eine negative
position
Wert:Mit einem
occurrence
parameter:Diese nicht existiert in PostgreSQL. Sie scheinen nicht zu benötigen (Beispiel gibt
occurrence = 1
) aber wenn Sie das tun, dann müssen Sie eine Funktion schreiben, die rekursiv arbeitet auf sub-strings extrahiert aus der zweiten version.So:
wird