Diviser la colonne en plusieurs rangées dans Postgres
supposons que j'ai une table comme celle-ci:
subject | flag
----------------+------
this is a test | 2
subject est du type text , et flag est du type int . Je voudrais transformer cette table en quelque chose comme ceci dans Postgres:
token | flag
----------------+------
this | 2
is | 2
a | 2
test | 2
y a-t-il un moyen facile de le faire?
20
demandé sur
Erwin Brandstetter
2015-04-02 21:31:14
1 réponses
Dans Postgresql 9.3+ utiliser un LATERAL la rejoindre:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
notez que la forme abrégée d'une LATERAL join ne renvoie que les lignes, si unnest() renvoie réellement la(Les) ligne (s).
vous pouvez également utiliser regexp_split_to_table() , mais c'est généralement plus lent parce que l'appariement des expressions régulières coûte un peu plus cher.
Related:
35
répondu
Erwin Brandstetter
2017-05-23 12:25:20