Comment concaténer des colonnes dans une Postgres CHOISIR?
J'ai deux colonnes de la chaîne a
et b
dans une table foo
.
select a, b from foo
renvoie les valeurs a
et b
. Cependant, la concaténation de a
et b
ne fonctionne pas. J'ai essayé :
select a || b from foo
et
select a||', '||b from foo
Mise à jour des commentaires: les deux colonnes sont de type character(2)
.
- est
a
une chaîne de caractères ? - ... ou d'une autre
text
type? - Depuis l'OP dit
concatenate
je doute qu'il s'agit de types numériques, bien que PostgreSQL serait de prendre soin de certains d'entre eux ainsi. Voir ici:postgresql.org/docs/9.1/static/functions-string.html - Oui, ces colonnes sont de type caractère(2). "+" ne fonctionne pas - " Aucun opérateur correspond au nom donné et le type d'argument(s). Vous pourriez avoir besoin d'ajouter de type explicite jette."
- Quelle est la version de PostgreSQL? Voici les docs pour 9.1: postgresql.org/docs/9.1/static/functions-string.html. Voir mon exemple: sqlfiddle.com/#!15/d41d8/182
- Vous avez probablement une erreur de syntaxe dans ta requête ne sont pas liées à la concaténation.
- Veuillez être précis. Lorsque vous dites qu'il "ne fonctionne pas", qu'est-ce exactement est-ce à dire? Message d'erreur s'il vous plaît, et de l'exacte origine de SQL pour aller avec elle. Aussi,
character
est un affreux type de données, les éviter autant que possible en faveur devarchar
outext
.
Vous devez vous connecter pour publier un commentaire.
Avec type de chaîne colonnes, comme
character(2)
(comme vous l'avez mentionné plus tard), l'affichage de la concaténation fonctionne, tout simplement parce que, citant le manuel:Gras c'est moi qui souligne. Le 2ème exemple (
select a||', '||b from foo
) travaille pour tout types de données depuis le non littéral de chaîne', '
par défaut de typetext
faire toute expression valide en tout cas.Pour les non-types de données chaîne, vous pouvez fixer la 1ère déclaration casting au moins un argument pour
text
. (Tout type peuvent être exprimées àtext
):À en juger par votre propre réponse, "ne fonctionne pas" était censé signifier "retourne NULL". Le résultat de rien concaténé à la valeur NULL est une valeur NULL. Si NULL valeurs peuvent être impliqués, et le résultat ne doit pas être NULL, utilisez
concat_ws()
pour concaténer un nombre quelconque de valeurs (Postgres 9.1 ou version ultérieure):Ou
concat()
si vous n'avez pas besoin de séparateurs:Pas besoin pour le type jette ici puisque les deux fonctions prennent
"tout"
d'entrée et de travailler avec des représentations du texte.Plus de détails (et pourquoi
COALESCE
est un piètre substitut) dans cette réponse:Concernant la mise à jour dans le commentaire
+
n'est pas valide d'opérateur de concaténation de chaîne dans Postgres (ou de la norme SQL). C'est un privé idée de Microsoft à l'ajouter à leurs produits.Il n'y a pratiquement aucune bonne raison de l'utiliser
(synonyme:character(n)
). Utilisationchar(n)
texte
ouvarchar
. Détails:Postgres 9.1 or later
, droit? Vous devriez avoir donné votre version de Postgres pour commencer, dans la question. Veuillez mise à jour de votre question avec toutes les informations demandées, avant de revenir pour autre chose.SELECT concat(a, b) FROM foo;
fonctionne pour moi dans Postgresql 9.3 lorsquea
etb
sontVARCHAR
s.Le problème était dans les valeurs null dans les valeurs; alors la concaténation ne fonctionne pas avec les valeurs null. La solution est comme suit:
il vaut mieux utiliser la fonction CONCAT dans PostgreSQL pour la concaténation
par exemple :
select CONCAT(first_name,last_name) from person where pid = 136
si vous utilisez column_a || '' || column_b pour la concaténation de 2 colonne , le cas échéant de la valeur dans column_a ou column_b est nulle requête renvoie la valeur null.
qui peut ne pas être privilégiés dans tous les cas.. donc au lieu de cette
utilisation
il sera de retour de valeur pertinente si l'une d'entre eux ont de la valeur
CONCAT fonctions parfois ne pas fonctionner avec les anciennes version de postgreSQL
voir ce que j'ai utilisé pour résoudre le problème sans l'aide de CONCAT
Ou vous pouvez également utiliser
dans le deuxième cas, j'ai utilisé des guillemets doubles pour first_name et last_name
Espère que ce sera utile, merci
Essayer cette
concat_ws(' ', FirstName, LastName)
serait beaucoup plus propre.PHP Laravel cadre,
Je suis en utilisant la recherche first_name, last_name Champs de prendre en considération, comme le Nom Complet de Recherche
Cela a fonctionné charme!!!
Par exemple, s'il est employé de la table qui se compose des colonnes:
si nous voulons concaténer
f_name + l_name
commename
.