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

CONVERT() vs TRY_CONVERT w SQL Server:jaka jest różnica?

Być może zauważyłeś, że T-SQL zawiera zarówno funkcję CONVERT() funkcja i TRY_CONVERT() funkcja, której można używać w programie SQL Server do wykonywania konwersji między typami danych. Ale jeśli zastanawiasz się, jaka jest różnica między tymi dwiema funkcjami, czytaj dalej!

Różnica między CONVERT() i TRY_CONVERT() w sposób, w jaki obsługują typy danych, których nie można przekonwertować. Jeden zgłasza błąd, a drugi zwraca wartość null. Poniższe przykłady pokazują to.

Funkcja CONVERT()

Najpierw spójrzmy, co CONVERT() funkcja robi. Konwertuje jeden typ danych na inny. Oto przykład:

SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

Wynik:

Result     
-----------
Comments: 9

W tym przykładzie konwertujemy int wartość do varchar(12) . A ponieważ wartość można było przekonwertować na pożądany typ danych i długość, zadziałało to idealnie.

Jednak chociaż działa to doskonale, gdy konwersja się powiedzie, co się stanie, gdy się nie powiedzie?

Gdy konwersja nie powiedzie się → Błąd

Poprawmy nieco kod i zobaczmy, co się stanie, gdy konwersja się nie powiedzie:

SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

Wynik:

Error: Arithmetic overflow error converting numeric to data type varchar.

Otrzymujemy błąd.

Funkcja TRY_CONVERT()

TRY_CONVERT() to alternatywa, której możemy użyć, aby zapobiec wyświetlaniu komunikatu o błędzie. Ta funkcja wykonuje tę samą operację konwersji danych, co CONVERT() , jednak jeśli ta funkcja nie może wykonać konwersji, zwraca null :

SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Wynik:

Result
------
null

Możesz wziąć ten wynik i zastosować kod warunkowy, aby wydarzyło się coś innego w zależności od tego, czy konwersja się powiedzie.

Przykład:

SELECT   
    CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL   
    THEN 'Conversion failed'  
    ELSE 'Conversion succeeded'  
END AS Result;

Wynik:

Result           
-----------------
Conversion failed

Nieprawidłowe typy danych

Jedno zastrzeżenie z TRY_CONVERT() jest to, że działa w ten sposób tylko w przypadku używania prawidłowych typów danych. Otrzymasz więc błąd, jeśli jawnie podasz niedozwolony typ danych.

Przykład:

SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;

Wynik:

Error: Type Homer is not a defined system type.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Magazyn zapytań SQL Server

  2. Aktualizacja platformy danych SQL Server w 2015 r.

  3. Zapytanie SQL do pobrania danych z ostatnich 3 miesięcy

  4. Sprawdź niewysłaną pocztę w SQL Server (T-SQL)

  5. Błąd serwera SQL 110:W instrukcji INSERT jest mniej kolumn niż wartości określone w klauzuli VALUES.