Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

CAST() срещу TRY_CAST() в SQL Server:Каква е разликата?

Когато конвертирате между типове данни в SQL Server, ще се сблъскате с различни функции, които привидно правят едно и също нещо. Въпреки това, обикновено има разлики между тези функции, които може да не са очевидни на пръв поглед. Пример за това е разликата между CAST() и TRY_CAST() функции.

Тази статия демонстрира разликата между тези функции при използване на SQL Server.

Основната разлика между CAST() и TRY_CAST() функции е в начина, по който обработват данни, които не могат да бъдат преобразувани.

Функцията CAST()

CAST() функция преобразува израз от един тип данни в друг. Това ви позволява да правите неща като конкатенация на две стойности от различни типове данни. Като това:

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

Резултат:

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

Това работи добре, когато данните могат да бъдат преобразувани. Но какво ще стане, ако данните не могат да бъдат преобразувани?

В този случай ще получите нещо подобно:

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

Резултат:

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

Това е достатъчно справедливо – ако SQL Server не може да преобразува данните, трябва да знаете!

Има обаче друг начин да го направите.

Функцията TRY_CAST()

 TRY_CAST() функцията работи точно като CAST() с изключение на това, че ако данните не могат да бъдат преобразувани, те връщат null (вместо да хвърля грешка като CAST() прави):

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

Резултат:

Result
------
null

Това може да е удобно, ако искате да използвате условно програмиране, така че приложението да изпълнява различна задача в зависимост от това дали данните могат да бъдат преобразувани или не.

Пример:

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

Резултат:

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

Невалидни типове данни

 TRY_CAST() функцията работи само по този начин, когато се използват валидни типове данни. Така че ще получите грешка, ако изрично предоставите тип данни, който не е разрешен.

Пример:

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

Резултат:

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. Преобразуване на дата и култура:Разлика между DATE и DATETIME

  2. Генерирайте набор от резултати от нарастващи дати в TSQL

  3. Създайте изчислена колона, която използва данни от друга таблица в SQL Server

  4. 6 начина да проверите дали таблица съществува в SQL Server (примери за T-SQL)

  5. Анализиране на I/O производителността за SQL Server