Ir para o conteúdo principal

Resultados do SELECT separados por virgula

Estou compartilhando um recurso muito útil e nativo do postgres, assim como utilizamos o famoso RETORNA LISTA que o postgres também possui uma função nativa, e pode ser visualizado no link abaixo:

Podemos nos deparar com a necessidade de retornar resultados de um SELECT separados/concatenados por virgulas por exemplo, ou qualquer outro delimitador, abaixo veremos o comando em um exemplo bem genérico, e sua explicação:

Exemplo de uso: 

SELECT ARRAY_TO_STRING(ARRAY(SELECT IDUSUARIO
                               FROM USUARIO_PAPELFUNCAO
                              WHERE IDPAPELFUNCAO = 25), ',')
  FROM VERSAODB

Ou seja, perceba que nosso SELECT principal esta dentro de um ARRAY(Conjunto de dados ou Matriz), e logo após utilizamos o recurso no postgres ARRAY_TO_STRING que transforma o ARRAY criado em uma string, e informamos neste comando que nosso limitador será a virgula, podendo ser alterado conforme sua necessidade.  

Retorno obtido: 

31,2,36,12

Caso de uso: 

Vamos supor que eu precisa de todos os usuários do papel função 25, já que somente esses podem colaborar em uma atividade em questão, porém, segundo levantado o usuário o qual iniciou o processo também poderá colaborar, sabendo que ele pode não ter o papel função 25, salvamos o Username deste usuário na variável /*USUARIO*/ 

SELECT ARRAY_TO_STRING(ARRAY(SELECT IDUSUARIO
                               FROM USUARIO_PAPELFUNCAO
                              WHERE IDPAPELFUNCAO = 25
                             
                             UNION ALL

                              SELECT IDUSUARIO
                                FROM USUARIO
                              WHERE USERNAME = '/*USUARIO*/'), ',')
FROM VERSAODB

Perceba que neste caso, optei por fazer um union all dentro do array, assim o resultado será convertido e concatenado ao conjunto de resultado, existem outras formas de atender essa demanda, espero que tenha ajudado e que você possa adaptar os exemplos acima em seus processos / SQLs.