Szukałem CONCAT
funkcji w SQL Server 2008 R2. I okazało się, że link do tej funkcji . Ale kiedy używam tej funkcji, daje następujący błąd:
Msg 195, poziom 15, stan 10, wiersz 7
„CONCAT” nie jest rozpoznawaną nazwą funkcji wbudowanej.
Czy CONCAT
funkcja istnieje w SQL Server 2008 R2?
Jeśli nie, jak połączyć ciągi znaków w programie SQL Server 2008 R2?
sql-server
sql-server-2008
tsql
Mitesh Budhabhatti
źródło
źródło
CONCAT
to, że jest to nowość w 2012 r.Odpowiedzi:
CONCAT
jest nowością w programie SQL Server 2012. Podane łącze wyjaśnia, że nie jest to funkcja we wcześniejszych wersjach , w tym w wersji 2008 R2.To, że jest częścią SQL Server 2012, można zobaczyć w drzewie dokumentów:
EDIT Martin Smith usłużnie wskazuje, że SQL Server zapewnia implementację ODBC za
CONCAT
funkcją .źródło
SELECT {fn concat ('foo', 'bar')};
w poprzednich wersjach. Akceptuje jednak tylko 2 parametry.+
operatora, jak @ lynn-langit wspomina w swojej odpowiedzi, którą na początku całkowicie przegapiłem, ponieważ przeczytałem tylko zaakceptowaną odpowiedź ...+
zachowuje się inaczej, wynikiSELECT 'A' + 'B' + 'C'
vsSELECT CONCAT('A', 'B', 'C')
vsSELECT 'A' + 'B' + NULL
vsSELECT CONCAT('A', 'B', NULL)
sąABC
,ABC
,NULL
,AB
NULL
, więc+
działało świetnie :)Tylko dla kompletności - w SQL 2008 użyłbyś
+
operatora plusa do wykonania konkatenacji ciągów.Zapoznaj się z dokumentacją MSDN z przykładowym kodem. Począwszy od SQL 2012, możesz chcieć użyć nowej funkcji CONCAT .
źródło
Proponuję rzucić wszystkie kolumny, zanim je połączysz
To powinno działać dla Ciebie.
źródło
CONCAT, jak stwierdzono, nie jest obsługiwane przed SQL Server 2012. Można jednak łączyć je po prostu za pomocą operatora +, zgodnie z sugestią. Ale uważaj, ten operator zgłosi błąd, jeśli pierwszy operand jest liczbą, ponieważ uważa, że będzie dodawać, a nie łączyć. Aby rozwiązać ten problem, po prostu dodaj „” na początku. Na przykład
zgłosi błąd, ALE
'' + someNumber + 'someString' + ......
będzie działać dobrze.Ponadto, jeśli są dwie liczby do połączenia, upewnij się, że dodałeś między nimi znak „”
źródło
SELECT 'varchar(' + 5 + ')'
wyświetla komunikat o błędzie „Konwersja nie powiodła się podczas konwersji wartości nvarchar 'varchar (' na typ danych int”, więc myślę, że twoja odpowiedź nie jest wystarczająca.Bezpieczny spadek o wartości NULL w przybliżeniach zastępczych dla funkcji CONCAT programu SQL Server 2012
SQL Server 2012 :
SELECT CONCAT(data1, data2)
PRE SQL 2012 (dwa rozwiązania) :
SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}
SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')
Te dwa rozwiązania obejmują kilka doskonałych odpowiedzi i zastrzeżeń zgłoszonych przez inne plakaty, w tym @Martin Smith, @Svish i @ vasin1987.
Te opcje dodają
NULL
do''
rzutowania (pusty łańcuch), aby zapewnić bezpiecznąNULL
obsługę, biorąc pod uwagę różne zachowania+
operatora dotyczące określonych operandów.Należy zauważyć, że rozwiązanie funkcji skalowania ODBC jest ograniczone do 2 argumentów, podczas gdy podejście
+
operatora jest skalowalne do wielu argumentów w razie potrzeby.Zwróć również uwagę na potencjalny problem zidentyfikowany przez @Swifty dotyczący domyślnego
varchar
rozmiaru, rozwiązany tutaj przezvarchar(MAX)
.źródło
Przesyłaj lub konwertuj tylko wtedy, gdy którykolwiek typ pola różni się od innych.
Podczas wstawiania wartość musi znajdować się we właściwym miejscu, w którym należy ją wstawić. Użycie „jako” spowoduje wystąpienie błędu.
to znaczy
źródło
Tak, tej funkcji nie ma w sql 2008. Możesz do tego użyć operacji rzutowania.
Na przykład mamy
employee
stół i chceszname
z nimapplydate
.więc możesz użyć
Będzie działać tam, gdzie funkcja concat nie działa.
źródło