Функция SQL Server TRY_CONVERT

В этом руководстве вы узнаете, как использовать функцию SQL Server TRY_CONVERT() для преобразования значения одного типа в другой.

Обзор функции SQL Server TRY_CONVERT()

Функция TRY_CONVERT() преобразует значение одного типа в другой. Она возвращает NULL, если преобразование не удалось.

Ниже показан синтаксис функции TRY_CONVERT():

TRY_CONVERT(
    data_type[(length)], 
    expression 
    [,style]
)

Функция TRY_CONVERT() принимает три аргумента:

  • data_type — допустимый тип данных, к которому функция приведет выражение.
  • выражение — это преобразуемое значение.
  • style — это предоставленное целое число, которое определяет, как функция будет преобразовывать выражение.

Функция TRY_CONVERT() пытается преобразовать переданное ей значение в указанный тип данных. Она возвращает значение как указанные данные, если приведение выполнено успешно; в противном случае она возвращает значение. Однако, если вы запросите преобразование, которое явно не разрешено, функция TRY_CONVERT() завершится ошибкой.

TRY_CONVERT() против CONVERT()

Если приведение не удается, функция TRY_CONVERT() возвращает NULL, а функция CONVERT() выдает ошибку. Это главное различие между двумя функциями.

Вы можете использовать функции обработки NULL или выражения, такие какISNULL() и COALESCE, для обработки результата функции TRY_CONVERT() в случае, если приведение не удалось.

Чтобы обработать результат функции CONVERT(), если приведение не удалось, используйте оператор TRY…CATCH.

Примеры функции SQL Server TRY_CONVERT()

Давайте рассмотрим несколько примеров использования функции TRY_CONVERT().

A) Пример TRY_CONVERT() возвращает NULL

В этом примере показано, как функция TRY_CONVERT() возвращает NULL в случае сбоя приведения типа:

SELECT 
    CASE
        WHEN TRY_CONVERT( INT, 'test') IS NULL
        THEN 'Cast failed'
        ELSE 'Cast succeeded'
    END AS Result;

Вот результат.

Result
-----------
Cast failed
(1 row affected)

B) TRY_CONVERT() вызывает ошибку пример

Следующий пример возвращает ошибку, поскольку целое число невозможно преобразовать в тип данных XML:

SELECT 
    TRY_CONVERT( XML, 20);

Вот ошибка:

Explicit conversion from data type int to xml is not allowed.

C) Примеры использования функции TRY_CONVERT() для преобразования строки в десятичную дробь

В этом примере функция TRY_CONVERT() используется для преобразования строки в десятичное число:

SELECT 
    TRY_CONVERT(DECIMAL(4,2), '12.34');

Вот результат:

Result
----------
12.34

Ниже показан еще один пример:

SELECT 
    TRY_CONVERT(DECIMAL(4,2), '12.345')  Result;

Результат округляется:

Result
-----------
12.35
(1 row affected)

Следующий пример возвращает NULL, поскольку функция TRY_CONVERT() не может преобразовать строку «1234.5» в DECIMAL(4, 2):

SELECT 
    TRY_CONVERT( DECIMAL(4, 2), '1234.5') Result;

Вот что получилось:

Result
-----------
NULL
(1 row affected)

D) Примеры использования функции TRY_CONVERT() для преобразования строки в целое число

В этом примере функция TRY_CONVERT() используется для преобразования строки в целое число:

SELECT 
    TRY_CONVERT( INT, '100') Result;

Вот что получилось:

Result
-----------
100
(1 row affected)

С другой стороны, этот пример возвращает NULL, поскольку приведение не удалось:

SELECT 
    TRY_CONVERT( INT, '100.5') Result;

Выход:

Result
-----------
NULL
(1 row affected)        

E) Пример использования функции TRY_CONVERT() для преобразования даты и времени в дату или время

В этом примере функция TRY_CONVERT() используется для преобразования текущей системной даты и времени в значение даты:

SELECT 
 TRY_CONVERT( DATE, GETDATE()) Result;

Вот что получилось:

Result
----------
2019-04-28
(1 row affected)

Аналогично вы можете использовать функцию TRY_CONVERT() для преобразования текущей системной даты и времени в значение времени:

SELECT 
 TRY_CONVERT( TIME, GETDATE()) Result;

Ниже показан результат:

Result
----------------
17:10:19.1700000
(1 row affected)

В этом руководстве вы узнали, как использовать функцию SQL Server TRY_CONVERT() для преобразования значения одного типа в другой.

Мирослав С.

Автор статей, ИБ-специалист