Eu tenho a seguinte tabela, lojas nomeadas:
store_id INT
emails VARCHAR
Que contém valores:
store_id | e-mails |
---|---|
1 | [email protected],[email protected] |
2 | [email protected],[email protected] |
4 | [email protected] |
E eu quero gerar o seguinte conjunto:
store_id | e-mails |
---|---|
1 | [email protected] |
1 | [email protected] |
2 | [email protected] |
2 | [email protected] |
4 | [email protected] |
Como você pode ver, quero dividir o campo de emails em um registro separado contendo apenas um endereço de email. Você tem alguma ideia de como posso fazer isso?
Até agora consegui criar a seguinte consulta:
select store_id,string_to_array(emails,',') from stores
Mas não sei como posso dividir o string_to_array
para sua própria linha.
Você precisa usar
UNNEST()
em conjunto comSTRING_TO_ARRAY()
o seguinte (violino disponível aqui ):Preencher:
E, em seguida, execute esta consulta:
Resultado:
Uma palavra de cautela - dependendo de como seus e-mails são formatados na string, você pode usar a
TRIM()
função para garantir que não haja espaços anteriores ou finais nos e-mails (mostrado no violino).Você pode dissecar o que está acontecendo se simplesmente executar:
Resultado (veja o violino atualizado ) - os emails ainda são apenas um registro - UNNEST coloca cada elemento separado do array em uma linha diferente!: