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