Jeśli kiedykolwiek próbowałeś połączyć ciąg z liczbą podczas korzystania z programu SQL Server, ale napotkałeś błąd, ten artykuł powinien wyjaśnić ci sprawę. Istnieje więcej niż jeden sposób wykonywania konkatenacji przy użyciu T-SQL w SQL Server, a jeśli łączysz różne typy danych (takie jak ciąg i liczba), możesz otrzymać błąd, w zależności od tego, jak wykonujesz konkatenację.
Podczas łączenia różnych typów danych należy pamiętać, że należy je najpierw przekonwertować na ten sam typ danych. Mówiąc dokładniej, przy łączeniu ciągu z liczbą, liczba będzie musiała zostać przekonwertowana na ciąg, zanim będzie można ją połączyć z ciągiem. Na szczęście SQL Server/T-SQL sprawia, że jest to bardzo proste.
W tym artykule przedstawiono sześć sposobów łączenia ciągów z liczbami za pomocą T-SQL.
Funkcja CONCAT()
Najbardziej oczywistym (i prawdopodobnie najlepszym) sposobem połączenia ciągu i liczby jest użycie CONCAT()
funkcjonować. Pozwala to na podanie ciągu i liczby jako dwóch oddzielnych argumentów. SQL Server następnie je połączy, a konkatenacja zostanie zakończona.
Przykład
SELECT CONCAT('Comments: ', 9) AS Result;
Wynik:
Result ----------- Comments: 9
Jak widać, działa to doskonale. Ciąg i numer są prezentowane jako jedno pole.
Zauważ, że nie jesteś ograniczony tylko do jednego ciągu i jednej liczby – CONCAT()
funkcja może przyjąć do 254 argumentów (tzn. można połączyć ze sobą do 254 ciągów/liczb).
Zwróć też uwagę, że CONCAT()
niejawnie konwertuje wszystkie argumenty na typy ciągów przed połączeniem. Ponadto CONCAT()
niejawnie konwertuje wszystkie wartości null na puste ciągi.
Funkcja CONCAT_WS()
Możemy pójść o krok dalej w poprzednim przykładzie, używając funkcji CONCAT_WS()
funkcjonować. Ta funkcja umożliwia określenie separatora.
Aby zapewnić separator, po prostu dodaj go jako pierwszy argument. Następnie określ ciąg i liczbę jako drugi i trzeci argument.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Wynik:
Result ----------- Comments: 9
Zauważ, że ta funkcja niekoniecznie jest odpowiednia do oddzielania par nazwa/wartość, ponieważ separator jest dodawany między każdym pojedynczym elementem, który jest łączony (więc zostanie również dodany między każdą parą w przypadku, gdy masz wiele par). W naszym przypadku działa to dobrze, ponieważ do połączenia mamy tylko jedną parę nazwa/wartość.
Jednak zawsze możesz zagnieździć wiele CONCAT_WS()
funkcji zwracających prawidłową konkatenację dla Twoich potrzeb (aby mieć inny separator między każdą parą).
Funkcja CONVERT()
Jeśli z jakiegoś powodu nie możesz (lub nie chcesz) użyć CONCAT()
lub CONCAT_WS()
funkcji, możesz wykonać konkatenację za pomocą operatora konkatenacji ciągów (+
). Korzystając z tej metody, musisz ręcznie wykonać konwersję typu danych.
Jednym ze sposobów konwersji między typami danych jest użycie CONVERT()
funkcja.
Oto, jak możesz to zrobić, używając tych samych danych z poprzednich przykładów:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Wynik:
Result ----------- Comments: 9
W tym przypadku konwertuję liczbę całkowitą na varchar(12), ale może to być dowolny typ danych i długość, jakiej potrzebujesz.
Funkcja CAST()
CAST()
funkcja jest bardzo podobna do funkcji CONVERT()
funkcjonować. Główna różnica polega na tym, że CAST()
jest standardowym ANSI i CONVERT()
jest specyficzny dla T-SQL. Powiedziawszy to, CONVERT()
ma kilka dodatkowych funkcji, ale na potrzeby tych przykładów możesz użyć jednej z nich.
Oto CAST()
wersja przy użyciu tych samych danych z poprzednich przykładów:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Wynik:
Result ----------- Comments: 9
Funkcja TRY_CONVERT()
Jeden potencjalny problem podczas korzystania z CONVERT()
funkcja polega na tym, że jeśli konwersja się nie powiedzie, otrzymasz błąd. Chociaż w wielu przypadkach jest to w porządku, w niektórych przypadkach może to nie być pożądane. W takich przypadkach możesz znaleźć TRY_CONVERT()
bardziej odpowiednie.
TRY_CONVERT()
funkcja konwertuje typ danych tak jak CONVERT()
funkcja robi. Jeśli jednak danych nie można przekonwertować, zwróci null
.
Na przykład, jeśli spróbujemy wykonać następujące czynności, otrzymamy błąd:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Wynik:
Error: Arithmetic overflow error converting numeric to data type varchar.
Jeśli jednak użyjemy TRY_CONVERT()
, otrzymujemy null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Wynik:
Result ------ null
W tym przypadku możesz użyć programowania warunkowego, aby wykonać inne zadanie w zależności od wyniku.
Funkcja TRY_CAST()
TRY_CAST()
funkcja działa w ten sam sposób. Konwertuje typ danych tak jak CAST()
funkcja działa, a jeśli danych nie można przekonwertować, zwróci null
.
Na przykład powoduje to błąd:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Wynik:
Error: Arithmetic overflow error converting numeric to data type varchar.
Ale jeśli użyjemy TRY_CAST()
zamiast tego otrzymujemy null
:
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Wynik:
Result ------ null