Wie verwende ich die CONCAT-Funktion in SQL Server 2008 R2?

102

Ich habe nach einer CONCATFunktion in SQL Server 2008 R2 gesucht . Ich habe den Link für diese Funktion gefunden . Aber wenn ich diese Funktion benutze, gibt es den folgenden Fehler:

Meldung 195, Ebene 15,
Status 10, Zeile 7 'CONCAT' ist kein anerkannter integrierter Funktionsname.

Ist die CONCATFunktion in SQL Server 2008 R2 vorhanden?

Wenn nicht, wie verkette ich Zeichenfolgen in SQL Server 2008 R2?

Mitesh Budhabhatti
quelle
@Oded Ich versuche nur, das stmt auszuführen - wähle concat ('b', 'a')
Mitesh Budhabhatti
1
@marc_s: Die Dokumentation hat einige Anzeichen haben , dass es für SQL Server 2012, aber es gibt keine Anzeichen dafür , dass CONCATist neu für 2012
Gabe
1
Es zeigt indirekt an, dass es für 2012 ist, aber die Seite ist schlecht UI-Design. Auf Seiten, auf denen eine Funktion in älteren Versionen verfügbar ist, wird direkt neben der Version des Dokuments, das Sie lesen, ein Dropdown-Menü angezeigt. Wenn Sie das wissen, dann wissen Sie, dass es nur für 2012 ist. Wenn Sie es nicht wussten, landen Sie in der gleichen Situation wie Mitesh.
John

Antworten:

70

CONCATist neu in SQL Server 2012. Der von Ihnen angegebene Link macht dies deutlich. Es handelt sich nicht um eine Funktion in früheren Versionen , einschließlich 2008 R2.

Dass es Teil von SQL Server 2012 ist, können Sie der Dokumentstruktur entnehmen:

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

BEARBEITEN Martin Smith weist hilfreich darauf hin, dass SQL Server eine Implementierung der ODBC- CONCATFunktion bietet .

ta.speot.is
quelle
26
Sie können SELECT {fn concat ('foo', 'bar')};in früheren Versionen verwenden. Akzeptiert jedoch nur 2 Parameter.
Martin Smith
6
Oder verwenden Sie einfach den +Operator, wie @ lynn-langit in ihrer Antwort erwähnt, die ich zunächst völlig verpasst habe, weil ich nur die akzeptierte Antwort gelesen habe ...
Svish
7
@Svish +verhält sich anders, die Ergebnisse für SELECT 'A' + 'B' + 'C'vs SELECT CONCAT('A', 'B', 'C')vs SELECT 'A' + 'B' + NULLvs SELECT CONCAT('A', 'B', NULL)sind ABC, ABC, NULL,AB
ta.speot.is
@ ta.speot.ist Gut zu wissen! Obwohl es in meinem Fall keine Fälle gab NULL, hat das +
super
Diese Antwort wäre viel nützlicher, wenn sie die Informationen enthalten würde, dass Sie stattdessen das Pluszeichen verwenden müssen. Die Community bestätigt diese Meinung - vergleichen Sie die positiven Stimmen der Antwort von @ LynnLangit :) Das OP fragte auch: "Wie verkette ich Zeichenfolgen in SQL Server 2008 R2?"
Honza Zidek
101

Der Vollständigkeit halber würden Sie in SQL 2008 den +Operator plus verwenden , um die Verkettung von Zeichenfolgen durchzuführen.

Schauen Sie sich die MSDN-Referenz mit Beispielcode an. Ab SQL 2012 möchten Sie möglicherweise die neue CONCAT-Funktion verwenden .

Lynn Langit
quelle
46

Ich schlage vor, Sie werfen alle Spalten, bevor Sie sie zusammenfassen

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

Dies sollte für Sie funktionieren.

vasin1987
quelle
6
TIPP: Es ist erwähnenswert, dass SQL, wenn keine Varchar-Größe angegeben ist, z. B. Varchar (50), den Standardwert 30 verwendet. Wenn die zu konvertierende Variable / der Wert mehr als der Standardwert ist, wird sie abgeschnitten, ohne dass ein Fehler auftritt.
Swifty
23

Wie bereits erwähnt, wird CONCAT vor SQL Server 2012 nicht unterstützt. Sie können jedoch einfach mit dem Operator + verketten, wie vorgeschlagen. Beachten Sie jedoch, dass dieser Operator einen Fehler auslöst, wenn der erste Operand eine Zahl ist, da er glaubt, dass er hinzugefügt und nicht verkettet wird. Um dieses Problem zu beheben, fügen Sie einfach '' vor. Beispielsweise

someNumber + 'someString' + .... + lastVariableToConcatenate

wird einen Fehler auslösen, aber es '' + someNumber + 'someString' + ......wird gut funktionieren.

Wenn zwei Zahlen verkettet werden müssen, stellen Sie sicher, dass Sie wie folgt ein '' dazwischen einfügen

.... + someNumber + '' + someOtherNumber + .....
kuklei
quelle
Vielen Dank, die Verwendung von '' + f.columnName + '' in der Spaltenliste ist ein Vergnügen!
Luke
2
@kuklei Auf meinem SQL Server wird SELECT 'varchar(' + 5 + ')'der Fehler "Konvertierung beim Konvertieren des nvarchar-Werts 'varchar (' in den Datentyp int fehlgeschlagen" ausgelöst, sodass Ihre Antwort vermutlich nicht zutrifft.
Alexander
5

NULL sicherer Abfall der Ersatznäherungen für die CONCAT-Funktion von SQL Server 2012

SQL Server 2012 :

SELECT CONCAT(data1, data2)

PRE SQL 2012 (zwei Lösungen) :

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

Diese beiden Lösungen fassen mehrere hervorragende Antworten und Vorbehalte zusammen, die von anderen Postern wie @Martin Smith, @Svish und @ vasin1987 angesprochen wurden.

Diese Optionen ergänzen NULLdas ''Casting (leere Zeichenfolge) für eine sichere NULLHandhabung, während das unterschiedliche Verhalten des +Operators in Bezug auf bestimmte Operanden berücksichtigt wird .

Beachten Sie, dass die ODBC Scaler Function- Lösung auf 2 Argumente beschränkt ist, während der +Operator- Ansatz nach Bedarf auf viele Argumente skalierbar ist.

Beachten Sie auch das potenzielle Problem, das @Swifty in Bezug auf die Standardgröße identifiziert hat, das varcharhier durch behoben wurde varchar(MAX).

Troy Sheaffer
quelle
3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

Nur umwandeln oder konvertieren, wenn sich ein Feldtyp von anderen unterscheidet.

Beim Einfügen muss sich der Wert an der richtigen Stelle befinden, an der er eingefügt werden soll. Wenn Sie "as" verwenden, wird ein Fehler angezeigt.

dh

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))
Antonio Perez
quelle
2

Ja, die Funktion ist nicht in SQL 2008. Sie können die Cast-Operation verwenden, um dies zu tun.

Zum Beispiel haben wir employeeTisch und Sie wollen namemit applydate.

so können Sie verwenden

Select   cast(name as varchar) + cast(applydate as varchar) from employee

Es funktioniert, wenn die Concat-Funktion nicht funktioniert.

M Faisal SE
quelle