Tengo dos columnas de cadena a
y b
en una tabla foo
.
select a, b from foo
devuelve valores a
y b
. Sin embargo, la concatenación de a
y b
no funciona. Lo intenté :
select a || b from foo
y
select a||', '||b from foo
Actualización de comentarios: ambas columnas son de tipo character(2)
.
text
tipo?concatenate
que dudo que esté tratando con tipos numéricos, aunque PostgreSQL también se encargaría de algunos de ellos. Ver aquí: postgresql.org/docs/9.1/static/functions-string.htmlRespuestas:
Con columnas de tipo cadena como
character(2)
(como mencionó más adelante), la concatenación mostrada simplemente funciona porque, citando el manual:El énfasis en negrita es mío. El segundo ejemplo (
select a||', '||b from foo
) funciona para cualquier tipo de datos, ya que el literal de cadena sin tipo', '
predeterminado es el tipo quetext
hace válida toda la expresión en cualquier caso.Para los tipos de datos que no son cadenas, puede "arreglar" la primera instrucción enviando al menos un argumento a
text
. ( Cualquier tipo puede ser enviado atext
):A juzgar por su propia respuesta , se suponía que " no funciona " significaba " devuelve NULL ". El resultado de cualquier cosa concatenada a NULL es NULL. Si los valores NULL pueden estar involucrados y el resultado no debe ser NULL, úselo
concat_ws()
para concatenar cualquier número de valores (Postgres 9.1 o posterior):O
concat()
si no necesitas separadores:No es necesario utilizar tipos de conversión aquí, ya que ambas funciones toman
"any"
entrada y trabajan con representaciones de texto.Más detalles (y por qué
COALESCE
es un pobre sustituto) en esta respuesta relacionada:En cuanto a la actualización en el comentario
+
no es un operador válido para la concatenación de cadenas en Postgres (o SQL estándar). Es una idea privada de Microsoft agregar esto a sus productos.Casi no hay una buena razón para usar
(sinónimo:)character(n)
. Usechar(n)
text
ovarchar
. Detalles:fuente
Postgres 9.1 or later
, ¿verdad? Para empezar, debería haber proporcionado su versión de Postgres, en la pregunta . Por favor, actualice su pregunta con toda la información solicitada, antes de volver para otra cosa.SELECT concat(a, b) FROM foo;
funciona para mí en Postgres 9.3 cuandoa
yb
sonVARCHAR
s.El problema estaba en nulos en los valores; entonces la concatenación no funciona con nulos. La solución es la siguiente:
fuente
es mejor usar la función CONCAT en PostgreSQL para la concatenación
p.ej :
select CONCAT(first_name,last_name) from person where pid = 136
si está utilizando column_a || '' || column_b para concatenación para 2 columnas, si alguno de los valores en column_a o column_b es nulo, la consulta devolverá un valor nulo. que puede no ser preferido en todos los casos ... así que en lugar de esto
utilizar
devolverá un valor relevante si alguno de ellos tiene valor
fuente
Las funciones CONCAT a veces no funcionan con versiones anteriores de postgreSQL
vea lo que solía resolver un problema sin usar CONCAT
O también puedes usar
en el segundo caso utilicé comillas dobles para first_name y last_name
Espero que esto sea útil, gracias
fuente
Como también estaba atrapado en esto, creo que debería compartir la solución que mejor funcionó para mí. También creo que esto es mucho más simple.
Si usa el nombre de la tabla en mayúscula.
Si usa el nombre de la tabla en minúsculas
¡Eso es!. Como PGSQL cuenta Double Quote para la declaración de columna y Single Quote para string, esto funciona de maravilla.
fuente
Marco Laravel de PHP, estoy usando el nombre de búsqueda, el apellido Los campos se consideran como Búsqueda de nombre completo
Esto funcionó encanto !!!
fuente
Prueba esto
fuente
concat_ws(' ', FirstName, LastName)
Sería mucho más limpio.Por ejemplo, si hay una tabla de empleados que consta de columnas como:
si queremos concatenar
f_name + l_name
comoname
.fuente