Функция SQL Server TRY_CAST

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

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

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

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

TRY_CAST( expression AS data_type [( length ) ] )  

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

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

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

TRY_CAST() против CAST()

Если приведение не удается, функция TRY_CAST() возвращает NULL, а функция CAST() выдает ошибку.

Вы используете функции обработки NULL или выражения, такие какISNULL(), COALESCE или CASE, чтобы обработать результат функции TRY_CAST() в случае, если приведение не удалось. С другой стороны, вы используете оператор TRY…CATCH для обработки результата функции CAST() , если приведение не удалось.

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

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

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

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

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

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

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

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

В этом примере возвращается ошибка, поскольку число невозможно преобразовать в тип данных XML:

SELECT 
    TRY_CAST(30.5 AS XML);

Вот ошибка:

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

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

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

SELECT 
    TRY_CAST('12.34' AS DECIMAL(4, 2)) Result

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

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

Вот еще один пример:

SELECT 
    TRY_CAST('12.345' AS DECIMAL(4,2))  Result;

Результат округляется до 12,35:

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

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

SELECT 
    TRY_CAST('1234.5' AS DECIMAL(4, 2)) Result;

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

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

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

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

SELECT 
    TRY_CAST('100' AS INT) Result;

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

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

В этом примере возвращается NULL, поскольку приведение не удалось:

SELECT 
    TRY_CAST('100.5' AS INT) Result;

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

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

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

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

SELECT 
 TRY_CAST(GETDATE() AS DATE) Result;

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

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

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

SELECT 
 TRY_CAST(GETDATE() AS TIME) Result;

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

Result
----------------
17:36:37.5900000
(1 row affected)

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

Мирослав С.

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