Diviser une colonne en plusieurs lignes dans Postgres
Supposons que vous ayez une table avec une colonne contenant plusieurs valeurs, telles que :
subject | flag --------+----- this is a test | 2
Vous devrez peut-être transformer ce tableau en une nouvelle structure où chaque valeur de la colonne d'origine devient une ligne distincte, comme ceci :
token | flag --------+----- this | 2 is | 2 a | 2 test | 2
Solution avec jointure LATERAL (Postgres 14)
Postgres 14 et versions ultérieures fournissent un moyen efficace d'y parvenir en utilisant une jointure LATERAL avec string_to_table( ) fonction. Cette fonction divise la colonne d'objet en un tableau de jetons :
SELECT token, flag FROM tbl, string_to_table(subject, ' ') AS token WHERE flag = 2;
Solution avec string_to_array() (Postgres 13-)
Pour Postgres 13 ou version antérieure, utilisez la fonction string_to_array() au lieu de string_to_table() :
SELECT unnest(string_to_array(subject, ' ')) AS token, flag FROM tbl WHERE flag = 2;
Solution alternative avec Regexp
Une autre option consiste à utiliser la fonction regexp_split_to_table(), bien qu'elle soit moins efficace que string_to_table() approche :
SELECT s.token, t.flag FROM tbl t CROSS JOIN regexp_split_to_table(subject, ' ') AS s(token) WHERE t.flag = 2;
Supplémentaire Notes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!