Wenn Sie jemals versucht haben, eine Zeichenfolge mit einer Zahl zu verketten, während Sie SQL Server verwenden, aber einen Fehler erhalten haben, sollte dieser Artikel die Dinge für Sie klären. Es gibt mehrere Möglichkeiten, eine Verkettung mit T-SQL in SQL Server durchzuführen, und wenn Sie verschiedene Datentypen verketten (z. B. eine Zeichenfolge und eine Zahl), erhalten Sie möglicherweise eine Fehlermeldung, je nachdem, wie Sie die Verkettung durchführen.
Beachten Sie bei der Verkettung verschiedener Datentypen, dass sie zuerst in denselben Datentyp konvertiert werden müssen. Genauer gesagt, wenn eine Zeichenfolge mit einer Zahl verkettet wird, muss die Zahl in eine Zeichenfolge konvertiert werden, bevor sie mit der Zeichenfolge verkettet werden kann. Glücklicherweise macht SQL Server/T-SQL dies zu einem Kinderspiel.
In diesem Artikel werden sechs Möglichkeiten zum Verketten von Zeichenfolgen mit Zahlen mithilfe von T-SQL vorgestellt.
Die CONCAT()-Funktion
Der naheliegendste (und möglicherweise beste) Weg, einen String und eine Zahl zu verketten, ist die Verwendung von CONCAT()
Funktion. Auf diese Weise können Sie die Zeichenfolge und die Zahl als zwei separate Argumente bereitstellen. SQL Server wird sie dann verketten, und Ihre Verkettung ist abgeschlossen.
Beispiel
SELECT CONCAT('Comments: ', 9) AS Result;
Ergebnis:
Result ----------- Comments: 9
Wie Sie sehen können, funktioniert dies perfekt. Die Zeichenfolge und die Zahl werden als ein Feld dargestellt.
Beachten Sie, dass Sie nicht auf nur einen String und eine Zahl beschränkt sind – den CONCAT()
Die Funktion kann bis zu 254 Argumente akzeptieren (d.h. Sie können bis zu 254 Zeichenfolgen/Zahlen miteinander verbinden.
Beachten Sie auch, dass CONCAT()
konvertiert alle Argumente vor der Verkettung implizit in Zeichenfolgentypen. Außerdem CONCAT()
wandelt implizit alle Nullwerte in leere Zeichenfolgen um.
Die CONCAT_WS()-Funktion
Wir können das vorherige Beispiel noch einen Schritt weiterführen, indem wir CONCAT_WS()
verwenden Funktion. Mit dieser Funktion können Sie ein Trennzeichen angeben.
Um ein Trennzeichen bereitzustellen, fügen Sie dieses einfach als erstes Argument hinzu. Geben Sie dann die Zeichenfolge und die Zahl als zweites und drittes Argument an.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Ergebnis:
Result ----------- Comments: 9
Beachten Sie, dass diese Funktion nicht unbedingt zum Trennen von Name/Wert-Paaren geeignet ist, da das Trennzeichen zwischen jedem einzelnen Element hinzugefügt wird, das verkettet wird (es wird also auch zwischen jedem Paar hinzugefügt, falls Sie mehrere Paare haben). In unserem Fall funktioniert es gut, weil wir nur ein Name/Wert-Paar zu verketten haben.
Sie können jedoch immer mehrere CONCAT_WS()
verschachteln Funktionen, um die richtige Verkettung für Ihre Anforderungen zurückzugeben (damit Sie ein anderes Trennzeichen zwischen jedem Paar haben können).
Die CONVERT()-Funktion
Wenn Sie aus irgendeinem Grund das CONCAT()
nicht verwenden können (oder wollen). oder CONCAT_WS()
Funktionen können Sie eine Verkettung mit dem Zeichenfolgenverkettungsoperator (+
). Wenn Sie diese Methode verwenden, müssen Sie alle Datentypkonvertierungen manuell durchführen.
Eine Möglichkeit, zwischen Datentypen zu konvertieren, ist die Verwendung von CONVERT()
Funktion.
So würden Sie dies mit denselben Daten aus den vorherigen Beispielen tun:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Ergebnis:
Result ----------- Comments: 9
In diesem Fall wandle ich die Ganzzahl in varchar(12) um, aber das kann jeder Datentyp und jede gewünschte Länge sein.
Die CAST()-Funktion
Der CAST()
Funktion ist der CONVERT()
sehr ähnlich Funktion. Der Hauptunterschied besteht darin, dass CAST()
ist Standard-ANSI und CONVERT()
ist spezifisch für T-SQL. Abgesehen davon, CONVERT()
hat einige zusätzliche Funktionen, aber für die Zwecke dieser Beispiele können Sie beide verwenden.
Hier ist der CAST()
Version mit den gleichen Daten aus den vorherigen Beispielen:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Ergebnis:
Result ----------- Comments: 9
Die TRY_CONVERT()-Funktion
Ein mögliches Problem bei der Verwendung von CONVERT()
Funktion ist, dass Sie eine Fehlermeldung erhalten, wenn die Konvertierung nicht erfolgreich ist. Während dies in vielen Fällen in Ordnung ist, ist dies in einigen Fällen möglicherweise nicht wünschenswert. In solchen Fällen finden Sie möglicherweise TRY_CONVERT()
besser geeignet.
Der TRY_CONVERT()
Funktion konvertiert den Datentyp genauso wie CONVERT()
Funktion tut. Wenn die Daten jedoch nicht konvertiert werden können, wird null
zurückgegeben .
Wenn wir beispielsweise versuchen, Folgendes zu tun, erhalten wir eine Fehlermeldung:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Ergebnis:
Error: Arithmetic overflow error converting numeric to data type varchar.
Wenn wir jedoch TRY_CONVERT()
verwenden , erhalten wir null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Ergebnis:
Result ------ null
Sie können in diesem Fall die bedingte Programmierung verwenden, um je nach Ergebnis eine andere Aufgabe auszuführen.
Die TRY_CAST()-Funktion
Der TRY_CAST()
Funktion funktioniert genauso. Es konvertiert den Datentyp genauso wie CAST()
funktioniert, und wenn die Daten nicht konvertiert werden können, gibt sie null
zurück .
Dies gibt beispielsweise einen Fehler aus:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Ergebnis:
Error: Arithmetic overflow error converting numeric to data type varchar.
Aber wenn wir TRY_CAST()
verwenden stattdessen erhalten wir null
:
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Ergebnis:
Result ------ null