PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So teilen Sie eine Zeile in Postgresql in viele Zeilen auf

Sie können regexp_split_to_table verwenden mit einem negativen Lookahead für beschädigt;

SELECT "ID", regexp_split_to_table("Cars", '((, (?!damaged))| and )') "Cars" 
FROM mytable;

 ID |      Cars
----+-----------------
  1 | opel
  1 | honda
  1 | land rover
  2 | ford
  2 | porshe, damaged
  3 | volkswagen
  4 | opel
  4 | seat, damaged
(8 rows)

Ein SQLfiddle zum Testen .

EDIT:Für Ihre neuen Beispiele musste die Regex ein wenig angepasst werden;

SELECT "ID", regexp_split_to_table("Cars", '(([,;] (?!damaged))|[,;]? and )') "Cars" 
FROM mytable;

Eine weitere SQLfiddle .