Може би сте забелязали, че 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.