В этом руководстве вы узнаете, как использовать функцию SQL Server CAST() для преобразования значения или выражения из одного типа в другой.
- Введение в функцию SQL Server CAST()
- Примеры функции SQL Server CAST()
- A) Пример использования функции CAST() для преобразования десятичной дроби в целое число
- B) Использование функции CAST() для преобразования десятичной дроби в другую десятичную дробь другой длины
- C) Пример использования функции CAST() для преобразования строки в значение даты и времени
- D) Использование функции 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;
На следующем рисунке показан результат:
В этом руководстве вы узнали, как использовать функцию SQL Server CAST() для преобразования значения из одного типа в другой.