2017-08-20 7 views
1

Postgres-Datenbanktabelle enthält durch Leerzeichen getrennte Wörter in char (20) -Spalte. Ergebnis von Select-Anweisung sollte eine Tabelle mit zwei Spalten sein.So extrahieren Sie erste und verbleibende Wörter in Postgres

Die erste Spalte sollte das erste Wort enthalten. Die zweite Spalte sollte die restlichen Wörter enthalten. Zum Beispiel

create temp table test (name char(20)) on commit drop ; 
insert into test values 
('word11 word12 word13'), 
('word21'), 
('word31 word32'); 

SELECT 
     ? as firstword, 
     ? as remainingwords 
from test; 

Sollte

firstword  remainingwords 
word11  word12 word13 
word21 
word31  word32 

produzieren, was Ausdrücke anstelle von können? Marken, um dies zu produzieren. Kann ein regexp benutzt oder eine andere Lösung sein?

Mit PostgreSQL 9.1.2

Antwort

2

die Werte in ein Array umwandeln und verwenden:

select (string_to_array(t, ' '))[1] as first_word, 
     (string_to_array(t, ' '))[2:99] 
from test; 

Arrays sind einfacher zu arbeiten als mit Streichern, insbesondere, wenn Sie Listen innerhalb einer Zeile haben. Sie können jedoch zurück in eine Zeichenfolge konvertieren, wenn Sie array_to_string() verwenden möchten.

select (string_to_array(t, ' '))[1] as first_word, 
     (string_to_array(t, ' '))[2:cardinality(string_to_array(t, ' '))] 
from test; 

In Postgres 9.6, diese Kurzschrift unterstützt wird:

In Ihrer Version von Postgres, mehr ist dies genau wie geschrieben

bespannen
select (string_to_array(t, ' '))[1] as first_word, 
     (string_to_array(t, ' '))[2:] 
from test; 
+0

I umgewandelt Ergebnis wieder mit 'wählen (string_to_array (name, '')) [1], array_to_string ((string_to_array (name, '')) [2:99], '') von test; 'Ist das in Ordnung? – Andrus

+0

@Andrus. . . Ja, das ist in Ordnung. –

Verwandte Themen