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