J'ai deux colonnes de 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 à partir des commentaires: les deux colonnes sont de type character(2)
.
text
type?concatenate
je doute qu'il ait affaire à des types numériques, bien que PostgreSQL se charge également de certains d'entre eux. Voir ici: postgresql.org/docs/9.1/static/functions-string.htmlRéponses:
Avec des colonnes de type chaîne comme
character(2)
(comme vous l'avez mentionné plus tard), la concaténation affichée fonctionne simplement parce que, citant le manuel:Je souligne le mien. Le deuxième exemple (
select a||', '||b from foo
) fonctionne pour tous les types de données puisque la chaîne littérale non typée', '
est par défaut de type,text
ce qui rend l'expression entière valide dans tous les cas.Pour les types de données non-chaîne, vous pouvez "corriger" la première instruction en convertissant au moins un argument en
text
. ( Tout type peut être converti entext
):A en juger d'après votre propre réponse , " ne fonctionne pas " était censé signifier " renvoie NULL ". Le résultat de tout ce qui est concaténé à NULL est NULL. Si des valeurs NULL peuvent être impliquées et que le résultat ne doit pas être NULL, utilisez
concat_ws()
pour concaténer n'importe quel nombre de valeurs (Postgres 9.1 ou version ultérieure):Ou
concat()
si vous n'avez pas besoin de séparateurs:Pas besoin de casts de type ici puisque les deux fonctions prennent des
"any"
entrées et fonctionnent avec des représentations textuelles.Plus de détails (et pourquoi
COALESCE
est un mauvais substitut) dans cette réponse connexe:Concernant la mise à jour dans le commentaire
+
n'est pas un opérateur valide pour la concaténation de chaînes dans Postgres (ou SQL standard). C'est une idée privée de Microsoft d'ajouter cela à ses produits.Il n'y a pratiquement aucune bonne raison d'utiliser
(synonyme:)character(n)
. Utilisezchar(n)
text
ouvarchar
. Détails:la source
Postgres 9.1 or later
, non? Vous devriez avoir fourni votre version de Postgres pour commencer, dans la question . Veuillez mettre à jour votre question avec toutes les informations demandées, avant de revenir pour autre chose.SELECT concat(a, b) FROM foo;
fonctionne pour moi dans Postgres 9.3 quanda
etb
sontVARCHAR
s.Le problème était dans les valeurs nulles; alors la concaténation ne fonctionne pas avec les valeurs nulles. La solution est la suivante:
la source
il est préférable d'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 pour 2 colonnes, si l'une des valeurs de column_a ou column_b est nulle, la requête retournera une valeur nulle. qui peut ne pas être préféré dans tous les cas .. donc au lieu de cela
utilisation
il renverra une valeur pertinente si l'un d'eux a une valeur
la source
Les fonctions CONCAT ne fonctionnent parfois pas avec les anciennes versions de PostgreSQL
voir ce que j'ai utilisé pour résoudre le problème sans utiliser CONCAT
Ou aussi vous pouvez utiliser
dans le second cas, j'ai utilisé des guillemets doubles pour prénom et nom
J'espère que cela sera utile, merci
la source
Comme j'étais également coincé là-dedans, je pense que je devrais partager la solution qui fonctionnait le mieux pour moi. Je pense aussi que c'est beaucoup plus simple.
Si vous utilisez un nom de table en majuscules.
Si vous utilisez un nom de table en minuscules
C'est tout!. Comme PGSQL compte Double Quote pour la déclaration de colonne et Single Quote pour la chaîne, cela fonctionne comme un charme.
la source
Framework Laravel de PHP, j'utilise la recherche first_name, last_name Les champs sont considérés comme la recherche par nom complet
Ce charme a fonctionné !!!
la source
Essaye ça
la source
concat_ws(' ', FirstName, LastName)
serait beaucoup plus propre.Par exemple, s'il existe une table des employés composée de colonnes comme:
si nous voulons concaténer
f_name + l_name
commename
.la source