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

CAST() vs TRY_CAST() w SQL Server:jaka jest różnica?

Podczas konwersji między typami danych w SQL Server natkniesz się na różne funkcje, które pozornie robią to samo. Jednak zazwyczaj istnieją różnice między tymi funkcjami, które mogą nie być widoczne na pierwszy rzut oka. Przykładem tego jest różnica między CAST() i TRY_CAST() funkcje.

Ten artykuł pokazuje różnicę między tymi funkcjami podczas korzystania z SQL Server.

Główna różnica między CAST() i TRY_CAST() funkcje obsługują dane, których nie można przekonwertować.

Funkcja CAST()

CAST() funkcja konwertuje wyrażenie jednego typu danych na inny. Pozwala to na takie rzeczy, jak łączenie dwóch wartości różnych typów danych. Tak:

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

Wynik:

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

Działa to dobrze, gdy dane można przekonwertować. Ale co, jeśli danych nie można przekonwertować?

W takim przypadku otrzymasz coś takiego:

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

Wynik:

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

To w porządku – jeśli SQL Server nie może przekonwertować danych, musisz wiedzieć!

Jest jednak inny sposób, aby to zrobić.

Funkcja TRY_CAST()

TRY_CAST() funkcja działa jak CAST() z wyjątkiem tego, że jeśli danych nie można przekonwertować, zwraca null (zamiast zgłaszania błędu takiego jak CAST() robi):

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

Wynik:

Result
------
null

Może to być przydatne, jeśli chcesz użyć programowania warunkowego, aby aplikacja wykonała inne zadanie w zależności od tego, czy dane mogą zostać przekonwertowane, czy nie.

Przykład:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Wynik:

Result     
-----------
Cast failed

Nieprawidłowe typy danych

TRY_CAST() Funkcja 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_CAST(10.00 AS Miami) AS Result;

Wynik:

Error: Type Miami 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. Jak zaimportować bazę danych SQL Server do programu Access 2016

  2. Maksymalna wartość podzapytania T-SQL (data) i łączenia

  3. Wstaw do... Scal... Wybierz (SQL Server)

  4. 5 szybkich przydatnych wskazówek dla administratorów baz danych SQL Server Production

  5. Zapytanie, aby uzyskać tylko liczby z ciągu