A matéria de hoje trata um assunto relativamente simples para que já tem algum conhecimento sobre SQL, mas em virtude do blog ter visitantes com todos os níveis de conhecimento, vamos abordar a função de concatenação no MySQL.
Concatenar campos nada mais é que junta-los a fim de demonstra-los somente em uma coluna, vamos a um exemplo:
1 – Demonstrar somente em uma coluna o nome da cidade seguida da unidade federativa.
selectconcat(cidade.nome,'-', estado.sigla)fromcidadeinner joinestadooncidade.id_uf = estado.id_uf
Results
Cuiabá - MT
São Paulo - SP
Rio de Janeiro - RJ
Com o concat podemos unir informações de diferentes tipos de dados, varchar, double, date dentro outros, com uma ressalva somente para o encoding, Latin concatenado com UF8 possivelmente dará o erro: Illegal mix of collations, tendo que haver uma conversão forçada dos dados concatenados.
Além do concat, qual temos que apresentar repetidamente qual será o separador, temos concat_ws, que definimos o separador uma única vez, este é definindo na primeira expressão da função e é assumido para todas as colunas estipuladas pela condição select, vejamos mais um exemplo:
2 – Concatenar com o separador ; (Ponto é vírgula) o código do funcionário, nome e local de trabalho.
selectconcat_ws(';',codigo, nome, local_trabalho)fromtrabalhador;
Results
01;Fabiano Abreu;Desenvolvimento
02;Everton;Desenvolvimento
O concat_ws até tempos atrás era desconhecido para mim, o que me ocasionou grande revolta (:d) pois constantemente tenho que desenvolver relatórios em formato csv (Para serem abertos no excel), logo, concatenava: coluna ; coluna ; coluna ;…. sendo que com o ws declaro somente uma vez o ; e todas as concatenações estavam feitas.
Outro comando interessante no nicho concat é o group_concat, com ele concatenamos linhas ao invés de colunas, transformando o resultado das linhas em uma única coluna, vejamos:
3 – Demonstrar somente em uma linha todos os códigos de produtos da categoria frios.
selectgroup_concat(codigo_produto)fromprodutoswherecategoria ='Frios';
Results
1,7,25,78...
Bom pessoal, espero que as dicas tenham sido mais uma vez úteis e, sugestões, críticas ou elogios serão bem vindos.
Grande abraços.

Ola Fabiano, preciso de uma orientação, é possível concatenar variável no comando Select?
por exemplo:
minha variável $woperador recebe do banco de dados o nome do operador logado.
E em uma pagina para exibir os resultados de um filtro tenho a seguinte instrução:
case "u10": $usersSql = "Select id,fullname,username,email,ip from users where super = 0 AND `delete` = '0' AND `opnome` = 'OperadorMaster' ORDER BY id DESC Limit 10";
nesta instrução onde esta o 'OperadorMaster' quero subistituir pela variável… é possível?
Olá Alex,
Possuo pouco conhecimento em programação front-end, mas creio que seja totalmente provável o que deseja, pois, se já possui a informação em uma variável, é só compará-la na instrução.
Grande abraço, e obrigado pela visita.
Muito Obrigado vlw o
Group_concat me ajudou muito aqui vlw mesmo!
Olá Wendell,
Eu que agradeço a visita, grande abraço.
Muito boa explicação! O group_concat acabou de me ajudar bastante!
Olá Fagner,
Obrigado pelo feedback, abraços.
Muito bom, tirei todas minhas duvidas, obrigado!
Show, obrigado por compartilhar!!
Olá Souzace.
Obrigado pelo feedback, grande abraço.
Até hoje o tópico ainda é funcional, meus parabéns.
Olá Amanda, fico feliz em ter ajudado.
Obrigado pelo feedback.
Valew mano, ajudou muito mesmo, obrigado!
Olá Bruno.
Fico feliz por ter ajudado, abraços.
Como faço para listar com tamanho fixo de um campo exemplo: select substr(descricao,0,30) as descricao from produtos
Você pode utilizar o comando rpad, ou lpad, representando direita e esquerda, respectivamente.
SELECT RPAD('descricao',30,' ')
Você pode especificar que será complementado com espaços, como no exemplo acima, mas fica a seu critério o "complemento".
Abraços.
flw, funcionou
obrigado, ajudou bastante.
Obrigado pelo feedback, Marco.
Group_Concat é limitado a 1024 caracteres, tem como concatenar um grande volume de dados em registros com outro comando?
Sabem me dizer qual seria essa mesma função em SQL server ?