Ich habe zwei String-Spalten a
und b
in einer Tabelle foo
.
select a, b from foo
gibt Werte a
und zurück b
. Die Verkettung von a
und b
funktioniert jedoch nicht. Ich habe es versucht :
select a || b from foo
und
select a||', '||b from foo
Update aus Kommentaren: Beide Spalten sind vom Typ character(2)
.
text
Typ?concatenate
bezweifle ich, dass er sich mit numerischen Typen befasst, obwohl PostgreSQL sich auch um einige von ihnen kümmern würde. Siehe hier: postgresql.org/docs/9.1/static/functions-string.htmlAntworten:
Bei Spalten vom Typ Zeichenfolge wie
character(2)
(wie Sie später erwähnt haben) funktioniert die angezeigte Verkettung nur, weil unter Berufung auf das Handbuch:Meine kühne Betonung. Das zweite Beispiel (
select a||', '||b from foo
) funktioniert für alle Datentypen, da das nicht typisierte Zeichenfolgenliteral', '
standardmäßig den Typ angibt,text
sodass der gesamte Ausdruck in jedem Fall gültig ist.Bei Datentypen ohne Zeichenfolge können Sie die erste Anweisung "korrigieren", indem Sie mindestens ein Argument in " Casting " umwandeln
text
. ( Jeder Typ kann gegossen werdentext
):Nach Ihrer eigenen Antwort zu urteilen , sollte " funktioniert nicht " " NULL zurückgeben " bedeuten . Das Ergebnis von allem, was mit NULL verkettet ist, ist NULL. Wenn NULL- Werte beteiligt sein können und das Ergebnis nicht NULL sein soll, verwenden Sie diese Option, um
concat_ws()
eine beliebige Anzahl von Werten zu verketten (Postgres 9.1 oder höher):Oder
concat()
wenn Sie keine Trennzeichen benötigen:Hier sind keine Typumwandlungen erforderlich, da beide Funktionen
"any"
Eingaben vornehmen und mit Textdarstellungen arbeiten.Weitere Details (und warum
COALESCE
ist ein schlechter Ersatz) in dieser verwandten Antwort:Zum Update im Kommentar
+
ist kein gültiger Operator für die Verkettung von Zeichenfolgen in Postgres (oder Standard-SQL). Es ist eine private Idee von Microsoft, dies zu ihren Produkten hinzuzufügen.Es gibt kaum einen guten Grund
(synonym :)character(n)
. Verwenden Siechar(n)
text
odervarchar
. Einzelheiten:quelle
Postgres 9.1 or later
, richtig? Sie sollten in der Frage zunächst Ihre Version von Postgres angegeben haben . Bitte aktualisieren Sie Ihre Frage mit allen angeforderten Informationen, bevor Sie für etwas anderes zurückkommen.SELECT concat(a, b) FROM foo;
arbeitet für mich in Postgres 9.3 wanna
undb
sindVARCHAR
s.Das Problem war in Nullen in den Werten; dann funktioniert die Verkettung nicht mit Nullen. Die Lösung lautet wie folgt:
quelle
Es ist besser, die CONCAT-Funktion in PostgreSQL zur Verkettung zu verwenden
z.B :
select CONCAT(first_name,last_name) from person where pid = 136
wenn Sie column_a || verwenden '' || column_b für die Verkettung von 2 Spalten. Wenn einer der Werte in column_a oder column_b null ist, gibt die Abfrage den Wert null zurück. was möglicherweise nicht in allen Fällen bevorzugt wird .. also stattdessen
verwenden
Es wird einen relevanten Wert zurückgeben, wenn einer von beiden einen Wert hat
quelle
CONCAT-Funktionen funktionieren manchmal nicht mit älteren postgreSQL-Versionen
Sehen Sie, was ich verwendet habe, um das Problem ohne CONCAT zu lösen
Oder Sie können auch verwenden
im zweiten Fall habe ich doppelte Anführungszeichen für Vorname und Nachname verwendet
Hoffe das wird nützlich sein, danke
quelle
Da ich auch darin feststeckte, denke ich, ich sollte die Lösung teilen, die für mich am besten funktioniert hat. Ich denke auch, dass dies viel einfacher ist.
Wenn Sie den Namen der großgeschriebenen Tabelle verwenden.
Wenn Sie den Tabellennamen in Kleinbuchstaben verwenden
Das ist es!. Da PGSQL Double Quote für die Spaltendeklaration und Single Quote für die Zeichenfolge zählt, funktioniert dies wie ein Zauber.
quelle
PHPs Laravel-Framework, ich verwende die Suche Vorname, Nachname Felder betrachten wie die vollständige Namenssuche
Das hat Charme geklappt !!!
quelle
Versuche dies
quelle
concat_ws(' ', FirstName, LastName)
wäre viel sauberer.Zum Beispiel, wenn es eine Mitarbeitertabelle gibt, die aus folgenden Spalten besteht:
wenn wir
f_name + l_name
als verketten wollenname
.quelle