Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

6 sposobów łączenia ciągu i liczby w SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj właściwą część ciągu w SQL Server (T-SQL)

  2. 2 sposoby tworzenia tabeli na serwerze połączonym za pomocą T-SQL

  3. Grupy dostępności programu SQL Server AlwaysOn:instalacja i konfiguracja, część 2

  4. Dlaczego nie ma funkcji okienkowych w klauzulach where?

  5. CROSS JOIN vs INNER JOIN w SQL