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

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

Може би сте забелязали, че T-SQL включва и двата CONVERT() функция и TRY_CONVERT() функция, която можете да използвате в SQL Server за извършване на преобразувания между типове данни. Но ако се чешете по въпроса каква е разликата между тези две функции, прочетете нататък!

Разликата между CONVERT() и TRY_CONVERT() е в начина, по който обработват типове данни, които не могат да бъдат преобразувани. Единият хвърля грешка, докато другият връща нула. Следните примери демонстрират това.

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

Първо, нека да разгледаме какво представлява CONVERT() функция прави. Той преобразува един тип данни в друг. Ето един пример:

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

Резултат:

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

В този пример ние преобразуваме int стойност на varchar(12) . И тъй като стойността успя да бъде преобразувана в желания от нас тип данни и дължина, това работи перфектно.

Въпреки това, докато това работи перфектно, когато преобразуването е успешно, какво се случва, когато не успее?

Когато преобразуването е неуспешно → Грешка

Нека настроим малко кода и да видим какво се случва, когато преобразуването не успее:

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

Резултат:

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

Получаваме грешка.

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

 TRY_CONVERT() е алтернатива, която можем да използваме, за да предотвратим съобщението за грешка. Тази функция изпълнява същата операция за преобразуване на данни като CONVERT() , обаче, ако тази функция не може да извърши преобразуването, тя връща null :

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

Резултат:

Result
------
null

Можете да вземете този резултат и да приложите условен код, така че да се случи различно нещо в зависимост от това дали преобразуването е успешно или не.

Пример:

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

Резултат:

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

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

Едно предупреждение с TRY_CONVERT() е, че работи само по този начин, когато се използват валидни типове данни. Така че ще получите грешка, ако изрично предоставите тип данни, който не е разрешен.

Пример:

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

Резултат:

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. Вътрешни елементи на SQL Server:Проблемни оператори Pt. III – Сортове

  2. scope_identity срещу ident_current

  3. TIMEFROMPARTS() Примери в SQL Server (T-SQL)

  4. Какви са разликите между Merge Join и Lookup трансформациите в SSIS?

  5. Гениална помощна програма за промяна на SQL парола за нулиране на SQL парола