Функция CAST SQL-сервера

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

Введение в функцию SQL Server CAST()

Давайте рассмотрим следующий запрос:

SELECT 1 + '1' AS result;

Возвращает 2 как число:

result
-----------
2
(1 row affected)

В этом операторе SQL Server неявно преобразует строку символов «1» в число 1.

При использовании двух значений с разными типами данных SQL Server попытается преобразовать меньший тип данных в больший, прежде чем он сможет обработать расчет. Это известно как неявное преобразование в SQL Server.

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

SELECT 1 + CAST(1 AS INT) result;

Синтаксис функции CAST() следующий:

CAST( expression AS target_type [( length ) ] )  

В этом синтаксисе:

  • выражение может быть литеральным значением или допустимым выражением любого типа, которое будет преобразовано.
  • target_type — целевой тип данных, в который вы хотите преобразовать выражение. Он включает INT, BIT, SQL_VARIANT и т. д. Обратите внимание, что он не может быть псевдонимом типа данных.
  • length — необязательное целое число, которое указывает длину целевого типа. Длина по умолчанию — 30.

Функция CAST() возвращает выражение, преобразованное в целевой тип данных.

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

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

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

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

SELECT CAST(5.95 AS INT) result;

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

result
-----------
5
(1 row affected)

B) Использование функции CAST() для преобразования десятичной дроби в другую десятичную дробь другой длины

В следующем примере функция CAST() используется для преобразования десятичного числа 5,95 в другое десятичное число с нулевой шкалой:

SELECT CAST(5.95 AS DEC(3,0)) result;

Вывод следующий:

result
-------
6

При преобразовании значения типов данных в разных местах SQL Server вернет усеченный результат или округленное значение на основе следующих правил:

Из типа данных К типу данных Поведение
числовой числовой Круглый
числовой инт Усечение
числовой деньги Круглый
деньги инт Круглый
деньги числовой Круглый
плавать инт Усечение
плавать числовой Круглый
плавать дата и время Круглый
дата и время инт Круглый

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

В этом примере функция CAST() используется для преобразования строки «2019-03-14» в дату и время :

SELECT 
    CAST('2019-03-14' AS DATETIME) result;

Вывод:

result
-----------------------
2019-03-14 00:00:00.000
(1 row affected)

D) Использование функции CAST() с арифметическими операторами

Для демонстрации мы будем использовать таблицы sales.orders и sales.order_items из образца базы данных :

Образцы таблиц

Следующий оператор использует функцию CAST() для преобразования ежемесячных продаж в 2017 году в целочисленные значения.

SELECT 
    MONTH(order_date) month, 
    CAST(SUM(quantity * list_price *(1 - discount)) AS INT) amount
FROM sales.orders o
    INNER JOIN sales.order_items i ON o.order_id = i.order_id
WHERE 
    YEAR(order_date) = 2017
GROUP BY 
    MONTH(order_date)
ORDER BY 
    month;

На следующем рисунке показан результат:

Пример функции CAST SQL Server

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

Мирослав С.

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