Eu tenho duas colunas de string a
e b
em uma tabela foo
.
select a, b from foo
retorna valores a
e b
. No entanto, concatenação a
e b
não funciona. Eu tentei :
select a || b from foo
e
select a||', '||b from foo
Atualização de comentários: as duas colunas são do tipo character(2)
.
text
tipo?concatenate
que duvido que ele esteja lidando com tipos numéricos, embora o PostgreSQL também cuide de alguns deles. Veja aqui: postgresql.org/docs/9.1/static/functions-string.htmlRespostas:
Com colunas do tipo string, como
character(2)
(como você mencionou mais adiante), a concatenação exibida funciona porque, citando o manual:Negrito ênfase minha. O segundo exemplo (
select a||', '||b from foo
) funciona para todos os tipos de dados, já que o literal da cadeia de caracteres sem', '
tipo padroniza o tipo,text
tornando a expressão inteira válida em qualquer caso.Para tipos de dados que não são de cadeia, você pode "consertar" a 1ª declaração lançando pelo menos um argumento para
text
. ( Qualquer tipo pode ser convertido paratext
):A julgar pela sua própria resposta , " não funciona " deveria significar " retorna NULL ". O resultado de qualquer coisa concatenada para NULL é NULL. Se valores NULL puderem estar envolvidos e o resultado não for NULL, use
concat_ws()
para concatenar qualquer número de valores (Postgres 9.1 ou posterior):Ou
concat()
se você não precisar de separadores:Não há necessidade de conversão de tipos aqui, pois ambas as funções recebem
"any"
entrada e trabalham com representações de texto.Mais detalhes (e por que
COALESCE
é um substituto ruim) nesta resposta relacionada:Em relação à atualização no comentário
+
não é um operador válido para concatenação de strings no Postgres (ou SQL padrão). É uma idéia particular da Microsoft adicionar isso a seus produtos.Não há praticamente nenhuma boa razão para usar
(sinônimo:character(n)
. Usechar(n)
text
ouvarchar
. Detalhes:fonte
Postgres 9.1 or later
, certo? Você deveria ter fornecido sua versão do Postgres para começar, na pergunta . Por favor, atualizar a sua pergunta com toda a informação solicitada, antes de voltar para qualquer outra coisa.SELECT concat(a, b) FROM foo;
funciona para mim no Postgres 9.3 quandoa
eb
sãoVARCHAR
s.O problema estava em valores nulos; a concatenação não funciona com nulos. A solução é a seguinte:
fonte
é melhor usar a função CONCAT no PostgreSQL para concatenação
por exemplo :
select CONCAT(first_name,last_name) from person where pid = 136
se você estiver usando column_a || '' || column_b para concatenação para 2 colunas, se algum valor em column_a ou column_b for nulo, a consulta retornará valor nulo. que pode não ser preferido em todos os casos.
usar
retornará valor relevante se um deles tiver valor
fonte
As funções do CONCAT às vezes não funcionam com a versão mais antiga do postgreSQL
ver o que eu usei para resolver o problema sem usar o CONCAT
Ou também você pode usar
no segundo caso, usei aspas duplas para first_name e last_name
Espero que isso seja útil, obrigado
fonte
Como eu também estava preso nisso, acho que deveria compartilhar a solução que funcionou melhor para mim. Eu também acho que isso é muito mais simples.
Se você usar o nome da tabela em maiúscula.
Se você usar o nome da tabela em minúsculas
É isso aí!. Como o PGSQL conta aspas duplas para declaração de coluna e aspas simples para string, isso funciona como um encanto.
fonte
No framework Laravel do PHP, estou usando a pesquisa first_name, last_name Os campos consideram como Pesquisa por nome completo
Este charme funcionou !!!
fonte
Tente isto
fonte
concat_ws(' ', FirstName, LastName)
seria muito mais limpo.Por exemplo, se houver uma tabela de funcionários que consiste em colunas como:
se queremos concatenar
f_name + l_name
comoname
.fonte