Que faire si vous avez une chaîne, que vous voulez la séparer en plusieurs morceaux suivant un pattern et que vous voulez récupérer chaque morceau sur une ligne ?
Commencer par créer la fonction suivante :
CREATE OR REPLACE FUNCTION split_to_rows(TEXT,TEXT) RETURNS SETOF TEXT
AS $$
SELECT (string_to_array($1, $2))[s.i]
FROM generate_series(
1,
array_upper(string_to_array($1, $2), 1)
) AS s(i);
$$ language sql strict;
Pour l'utiliser, rien de plus simple :
dev=#select split_to_rows('aa--bb--cc','--');split_to_rows
---------------
aa
bb
cc
(3 rows)
Cette fonction a été écrite par David Fetter (voir son message sur pgsql-general).