Letztes Zeichen in text finden

Hallo,

gibt es in Postgres eine Funktion, um das letzte und vorletzte Vorkommen eines Zeichens in einer Spalte (Typ: character varying) herauszufinden.
Oder muss ich dazu eine Funktion schreiben?
Zur Erläuterung vielleicht: ich habe in einer Spalte einen String stehen der eine n Pfad dastellt. Unterschiedliche Hierarchiestufen sind durch einen Punkt getrennt. Ich benötige nun den Teilstring zwischen den vorletzten und letzten Punkt und den Teilstring nach dem letzten String.

mfg chuqa

Siehe:

http://www.postgresql.org/docs/8.1/interactive/functions-string.html

Die Funktion, die du suchst, heisst substring().

Hi,

schau dir mal die Funktion substring an…

cu tb.

Edit: Mist ads war schneller :confused:

Ja wie ich den String rauslöse ist ja dann klar, nur wie bekomme ich die Positionen, wo ich beginnen und enden muss, ich brauche also die Positionen von dem letzten und von dem vorletzten Punkt.
Substring liefert mir doch nur den string ab einer bekannten Position?!
Bitte korrigiert mich wenn ich falsch liege.

Nun, die Länge des Strings wiederum liefert die LENGTH(), aber ev. kann substring() auch mit negativen Zahlen arbeiten und zählt dann ab dem Ende, nicht dem Anfang.

Naja ich brauche ja mehrere Koordinaten.
Ich habe z.B. so etwas in der Spalte stehen:
ordner1.ordner2.ordner3.ordner4.wert
und möchte daraus dann z.b. ordner4 und wert haben.
In der nächsten Spalte kann das ganze schon wieder anders aussehen:
ordner_neu1.ordner_sehrneu2.ordner_alt3.temp_ordner.neuer_wert
d.h. also die Werte für die Positionen variieren und mir reicht ein index nicht. ich könnte das natürlich auch von meinem programm erledigen lassen, dachte nur, dass es vielleicht schon so etwas fertig gibt, so dass ich die korrekten werte gleich erhalte.

Kennst Du Dich mit reg. Ausdrücken aus? Falls ja, wäre das wohl der Schlüssel.

Ansonsten gibt es auch funktionen, die ein String an einem Trennzeichen in ein Array splitten. Auch das würde zum Ziel führen.


Andreas, grad knapp bei zeit…

Mal als Bleistift für Array-Arbeit:

test=*# select array_dims(string_to_array('das.ist.ein.pfad.mit.wert', '.'));
 array_dims
------------
 [1:6]
(1 row)

test=*# select (string_to_array('das.ist.ein.pfad.mit.wert', '.'))[6];
 string_to_array
-----------------
 wert
(1 row)

test=*# select (string_to_array('das.ist.ein.pfad.mit.wert', '.'))[5];
 string_to_array
-----------------
 mit
(1 row)

test=*# select array_upper(string_to_array('das.ist.ein.pfad.mit.wert', '.'),1);
 array_upper
-------------
           6
(1 row)

HTH, Andreas

das wird weiterhelfen.

herzlichen dank