В SQL Server, TRY_CONVERT()
функцията е много подобна на CONVERT()
функция, с изключение на това TRY_CONVERT()
не връща грешка, ако преобразуването не успее (CONVERT()
прави).
Вместо това TRY_CONVERT()
функцията връща NULL
ако преобразуването не е успешно.
Има обаче някои случаи, когато TRY_CONVERT()
ще върне грешка.
Синтаксис
Синтаксисът е така:
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
Където expression
е изразът за преобразуване, data_type
е новият тип данни и length
е незадължителна дължина за новия тип данни.
Незадължителният style
Аргументът може да се използва, за да се определи как функцията трябва да преведе expression
аргумент. Например, можете да използвате този аргумент, за да посочите формата на датата.
Пример 1 – Преобразуването е успешно
Ето пример за преобразуване на низ в десетичен:
SELECT TRY_CONVERT(DECIMAL(5,2), '007');
Резултат:
7.00
В този случай преобразуването е успешно.
Пример 2 – Преобразуването е неуспешно и връща NULL
Ето пример за неуспешно преобразуване и NULL
се връща:
SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');
Резултат:
NULL
Преобразуването не бе успешно и така NULL
беше върнат.
За сравнение, ето какво се случва, когато използваме CONVERT()
вместо TRY_CONVERT()
:
SELECT CONVERT(DECIMAL(5,2), 'Three');
Резултат:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Пример 3 – Преобразуването е неуспешно и връща грешка
Има някои случаи, когато TRY_CONVERT()
ще върне грешка.
Ако преобразуването не е изрично разрешено, то връща грешка:
SELECT TRY_CONVERT(xml, 10);
Резултат:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Пример 4 – style
Аргумент
Можем да използваме незадължителния style
аргумент, за да посочите как трябва да бъде преведен изразът.
Пример:
SET LANGUAGE British;
SELECT
TRY_CONVERT(date, '09/02/2030') AS "British",
TRY_CONVERT(date, '09/02/2030', 101) AS "US",
TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
TRY_CONVERT(date, '20300902', 112) AS "ISO",
TRY_CONVERT(date, '09.02.2030', 104) AS "German";
Резултат:
Changed language setting to British. +------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Тук зададох моя език на British
, след което изпълни TRY_CONVERT()
няколко пъти, като всеки използва различен style
аргумент (с изключение на първия, който използва езика по подразбиране на моята сесия – британски).
Можем да видим, че аргументът style влияе върху начина, по който изразът се превежда.
Повече информация
Вижте CONVERT()
в SQL Server за повече примери за преобразуване и CONVERT()
срещу TRY_CONVERT()
в SQL Server за сравнение между CONVERT()
и TRY_CONVERT()
.
Вижте документацията на Microsoft за CAST()
и CONVERT()
за по-подробна информация (повечето се отнася и за TRY_CONVERT()
).