В SQL Server често използвана функция е CAST()
, който преобразува израз от един тип данни в друг. Но ако прехвърлянето не успее, то връща грешка.
Въведете TRY_CAST()
.
TRY_CAST()
функцията не връща грешка, ако прехвърлянето е неуспешно. Вместо това връща NULL
.
Има обаче някои случаи, когато ще върне грешка.
Синтаксис
Синтаксисът е така:
TRY_CAST ( expression AS data_type [ ( length ) ] )
Където expression
е изразът за преобразуване, data_type
е новият тип данни и length
е незадължителна дължина за новия тип данни.
Пример 1 – Прехвърлянето е успешно
Ето пример за прехвърляне на низ като decimal
:
SELECT TRY_CAST('007' AS DECIMAL(5,2));
Резултат:
7.00
В този случай актьорският състав успя.
Пример 2 – Прехвърлянето е неуспешно и връща NULL
Ето пример за неуспешно прехвърляне и NULL
се връща:
SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2));
Резултат:
NULL
Прехвърлянето е неуспешно и така NULL
беше върнат.
За сравнение, ето какво се случва, когато използваме CAST()
вместо TRY_CAST()
:
SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2));
Резултат:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Пример 3 – Прехвърлянето е неуспешно и връща грешка
Има някои случаи, когато TRY_CAST()
ще върне грешка.
Ако прехвърлянето не е изрично разрешено, то връща грешка:
SELECT TRY_CAST(10 AS xml);
Резултат:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Повече информация
Вижте как CAST()
Работи в SQL Server за повече примери за преобразуване и CAST()
срещу TRY_CAST()
в SQL Server за сравнение между CAST()
и TRY_CAST()
.
Вижте документацията на Microsoft за CAST()
и CONVERT()
за по-подробна информация (повечето от нея се отнася и за TRY_CAST()
).