2016-02-20 71 views
2

我有一張有兩列的表:ID和汽車。 的樣本數據是這樣的:如何在Postgresql中將行拆分成許多行

ID | Cars 
----------------- 
1 | opel, honda and land rover 
2 | ford and porshe, damaged 
3 | volkswagen 
4 | opel, seat, damaged 

我想它拆分成:

ID | Cars 
----------------- 
1 | opel 
1 | honda 
1 | land rover 
2 | ford 
2 | porshe, damaged 
3 | volkswagen 
4 | opel 
4 | seat, damaged 

因此分隔符and,但不, damaged 如何使用正則表達式來它在PostgreSQL的分裂?

編輯:

以及如何使它工作的記錄,像

5 | land rover and opel, and ford 
6 | ford; mazda and toyota 
+0

什麼樣的車是「porshe」? –

回答

4

可以使用regexp_split_to_table與受損負先行;

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) 

An SQLfiddle to test with

編輯:對於你的新例子,正則表達式不得不稍微調整;

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

Another SQLfiddle

+0

感謝您的快速回復!以及如何添加新行?因爲這只是選擇查詢。謝謝! – Mateusz

+0

@Mateusz也許你可以添加一個新的問題與更多的信息和例子你想要做什麼,這個問題甚至沒有提到插入新的行或輸入或生成的格式應該是什麼。 –

+0

然後我會重複我的問題,我認爲這不是在ookey上stackoverflow – Mateusz