Sql cast функция: SQL Server функция CAST — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Содержание
cast, convert; и функции агрегирования. Приведите примеры.
Для
явного преобразования данных из одного
типа в другой в SQL
используются функции CAST или CONVERT.
Синтаксис этих функций:
CAST (Выражение
AS Тип_данных[(Длина)])
CONVERT
(Тип_данных[(Длина)], Выражение [, Стиль]),
где
Выражение
— любое SQL-выражение либо название
столбца;
Тип_данных
— тип данных, в формате которого
представляется данное выражение. Может
использоваться числовой, символьный
тип или тип дата-время;
Длина
— длина поля вывода для символьных
типов данных;
Стиль
— формат представления данных при
конвертировании данных типа дата-время,
или числовых типов в символьные типы.
Функции
CAST
и CONVERT
используются при конвертировании
символьного типа в числовой тип или тип
дата-время и наоборот из числового типа
или типа дата-время в символьный тип.
• Любое
числовое выражение может быть явно
преобразовано в любой другой числовой
тип;
•
В
результате преобразования символьного
выражения в числовой тип отсекаются
начальные и конечные пробелы, а остальные
символы преобразуются в числовое
значение по правилам языка SQL;
• Если
явно заданная длина символьного типа
недостаточна и преобразованное значение
не размещается в нем, то результативное
значение усекается справа;
•
Возможно
явное преобразование символьного типа
в символьный, но с другой длиной. Если
длина результата больше длины аргумента,
то значение дополняется пробелами; если
меньше, то усекается;
•
NULL-значение
преобразуется в NULL-значение соответствующего
типа.
Пример
SELECT
CAST (STUDENT_ID AS CHAR(10))
FROM
STUDENT;
Агрегирующие
функции
позволяют получать из таблицы сводную
(агрегированную) информацию, выполняя
операции над группой строк таблицы. Для
задания в SELECT-запросе агрегирующих
операций используются следующие ключевые
слова:
•
COUNT
определяет количество строк или значений
столбца, выбранных посредством запроса
и не являющихся NULL-значениями;
•
SUM
вычисляет арифметическую сумму всех
выбранных значений данного столбца;
•
AVG
вычисляет среднее значение для всех
выбранных значений данного столбца;
•
МАХ
вычисляет наибольшее из всех выбранных
значений данного столбца;
•
MIN
вычисляет наименьшее из всех выбранных
значений данного столбца.
Для функций SUM
и AVG рассматриваемый столбец обязательно
должен содержать числовые значения.
В
функциях под столбцом понимают, столбец
виртуальной таблицы, в которой могут
содержаться данные не только из столбца
базовой таблицы, но и данные, полученные
путем преобразования. При этом выражение,
определяющее столбец такой таблицы,
может быть сколь угодно сложным, но не
должно содержать агрегирующие функций
(вложенность агрегирующих функций не
допускается). Однако из агрегирующих
функций можно составлять любые выражения.
Аргументу
всех функций, кроме COUNT(*), может
предшествовать ключевое слово DISTINCT
(различный), указывающее, что избыточные
дублирующие значения должны быть
исключены перед тем, как будет применяться
функция. Специальная же функция COUNT(*)
служит для подсчета всех без исключения
строк в таблице (включая дубликаты).
Если в
запросе, использующем агрегирующие
функции, не используется фраза GROUP BY, то
в перечень элементов оператора SELECT
можно включать лишь агрегирующие функции
или выражения, содержащие такие функции.
Другими словами, нельзя иметь в списке
столбцы, не являющихся аргументами
агрегирующих функций.
Например,
из таблицы книги, необходимо вывести
максимальную сумму, которую можно
получить при продаже всех одинаковых
книг, среднюю цену продаваемых книг,
количество авторов книг продаваемых в
магазине
SELECT
MAX(Кол_Кн*Цена), AVG(Цена),
COUNT(DISTINCT
Автор)
FROM КНИГИ;
Функции GZIP COMPRESS и DECOMPRESS в SQL Server
Время прочтения: 5 мин.
Начиная с версии SQL Server 2016, пользователям стали доступны функции сжатия данных COMPRESS и DECOMPRESS, с обширным набором примеров.
Функция COMPRESS – сжимает входные данные с использованием алгоритма GZIP и возвращает массив байтов типа varbinary(max).
Функция DECOMPRESS — распаковывает сжатые входные двоичные данные с использованием алгоритма GZIP и возвращает двоичные данные типа Varbinary(max). Но получим ли мы данные в исходном выражении или нет?
Данные функции используют стандартные алгоритм GZIP, поэтому значение, сжатое на уровне приложения, может быть распаковано на сервере SQL, а значение, сжатое на сервере SQL, может быть распаковано на уровне приложения. В этой статье, попробуем на примерах разобрать работу алгоритма GZIP и его эффективность.
Пример 1: Базовые функции сжатия и распаковки
SELECT COMPRESS ('Котик')
Результат:
0x1F8B08000000000004003BF5EED38B570050E41F3305000000
SELECT DECOMPRESS( 0x1F8B08000000000004003BF5EED38B570050E41F3305000000)
Результат:
0xCAEEF2E8EA
Как видим, результатом функции DECOMPRESS является не фактическое значение, а двоичные данные. Нам нужно явно привести результат функции DECOMPRESS к типу данных сжимаемой строки.
Давайте приведем результат функции DECOMPRESS к типу Varchar с помощью следующего запроса.
SELECT CAST(0xCAEEF2E8EA AS VARCHAR(MAX))
Результат:
Котик
Пример 2: Теперь выполним действия из 1-ого примера в одном запросе
SELECT 'Котик' '1.Исходные данные', COMPRESS('Котик') '2.Сжатые данные', DECOMPRESS(COMPRESS('Котик')) '3.Распакованные данные', CAST(DECOMPRESS(COMPRESS('Котик')) AS VARCHAR(MAX)) AS '4.Преобразованный тип данных'
Результат:
Пример 3: Сделаем тоже самое, через переменную
DECLARE @Cat VARCHAR(MAX) = 'Котик' SELECT @Cat '1.Исходные данные', COMPRESS(@Cat) '2.Сжатые данные', DECOMPRESS(COMPRESS(@Cat)) '3.Распакованные данные', CAST(DECOMPRESS(COMPRESS(@Cat)) AS VARCHAR(MAX)) AS '4.Преобразованный тип данных'
Результат:
Пример 4: Далее разберём важность правильного выбора типа возвращаемого закодированного значения
DECLARE @Cat VARCHAR(MAX) = 'Котик', @nCat NVARCHAR(MAX) = N'Котик' SELECT COMPRESS (@Cat) 'Данные типа Varchar' SELECT COMPRESS (@nCat) 'Данные типа NVarchar'
Результат:
Из приведенного выше результата видно, что обе переменные были установлены с одинаковыми значениями, но сжатый результат отличается, потому что одна переменная имеет тип Varchar, а другая переменная имеет тип NVarchar.
Пример 5: В примере разберём важность выбора правильного типа данных при преобразовании распакованного значения.
DECLARE @varcharCat VARCHAR(MAX) = 'Котик', @compressedCat VARBINARY(MAX) --Сжатие исходных данных типа VARCHAR SET @compressedCat = COMPRESS(@varcharCat) --Преобразовываем распакованные данные в тип данных VARCHAR и NVARCHAR SELECT @varcharCat 'Исходные данные VARCHAR', CAST(DECOMPRESS(@compressedCat) AS VARCHAR(MAX)) AS 'Данные типа Varchar', CAST(DECOMPRESS(@compressedCat) AS NVARCHAR(MAX)) AS 'Данные типа NVarchar'
Результат:
DECLARE @nVarCharCat NVARCHAR(MAX) = 'Котик', @compressedCat VARBINARY(MAX) --Сжатие исходных данных типа NVARCHAR SET @compressedCat = COMPRESS(@nVarCharCat) --Try to CAST the decompressed value as VARCHAR and NVARCHAR SELECT @nVarCharCat 'Исходные данные NVARCHAR', CAST(DECOMPRESS(@compressedCat) AS VARCHAR(MAX)) AS 'Данные типа Varchar', CAST(DECOMPRESS(@compressedCat) AS NVARCHAR(MAX)) AS 'Данные типа NVarchar'
Результат:
Из приведенных выше результатов ясно, что нам нужно преобразовать распакованное значение в тип фактического исходного типа строки, чтобы получить правильное значение.
Пример 6: Настало время рассмотреть на примере, когда сжатие будет эффективным, чтобы понять в какой области и для каких данных стоит его применять
DECLARE @CatToCompress VARCHAR(MAX) = 'COMPRESS и DECOMPRESS' SELECT DATALENGTH(@CatToCompress) '1.Длина данных ДО сжатия', DATALENGTH(COMPRESS(@CatToCompress)) '1.Длина данных ПОСЛЕ сжатия' GO DECLARE @CatToCompress VARCHAR(MAX) = 'Начиная с версии SQL Server 2016, пользователям стали доступны функции сжатия данных COMPRESS и DECOMPRESS, с обширным набором примеров. Функция COMPRESS – сжимает входные данные с использованием алгоритма GZIP и возвращает массив байтов типа varbinary(max).' SELECT DATALENGTH(@CatToCompress) '2.Длина данных ДО сжатия', DATALENGTH(COMPRESS(@CatToCompress)) '2.Длина данных ПОСЛЕ сжатия' GO DECLARE @CatToCompress VARCHAR(MAX) = 'Функция DECOMPRESS - распаковывает сжатые входные двоичные данные с использованием алгоритма GZIP и возвращает двоичные данные типа Varbinary(max). Но получим ли мы данные в исходном выражении или нет? Данные функции используют стандартные алгоритм GZIP, поэтому значение, сжатое на уровне приложения, может быть распаковано на сервере SQL, а значение, сжатое на сервере SQL, может быть распаковано на уровне приложения. В этой статье, попробуем на примерах разобрать работу алгоритма GZIP и его эффективность.' SELECT DATALENGTH(@CatToCompress) '3.Длина данных ДО сжатия', DATALENGTH(COMPRESS(@CatToCompress)) '3.Длина данных ПОСЛЕ сжатия'
Результат:
Из приведенных выше результатов ясно, что по мере увеличения длины сжимаемой строки, эффективность сжатия увеличивается.
Пример 7: Осталось рассмотреть, как использовать функции COMPRESS и DECOMPRESS при вставке и извлечении данных в столбец таблицы или из него.
Создадим таблицу Cats, выполнив следующий скрипт. В этой таблице столбец Discriptions. которые будет содержать значение, сжатое функцией COMPRESS.
CREATE TABLE dbo.Cats (Id INT IDENTITY(1,1), Nickname NVARCHAR(100), Discriptions VARBINARY(MAX))
Далее вставим запись в таблицу, используя следующий скрипт. Здесь мы сжимаем значение для столбца Discriptions перед сохранением в нем.
INSERT INTO dbo.Cats (Nickname, Discriptions) VALUES('Tom', COMPRESS(N'Особой похвалы удостоилась пародия на заставку компании MGM, в которой кот Том изображал рычание льва Лео.'))
Следующим запросом мы получим вставленную запись из таблицы Cats. Здесь мы используем функцию DECOMPRESS для возврата распакованного значения столбца Discriptions.
SELECT Id, Nickname, Discriptions 'Сжатые данные', CAST( DECOMPRESS(Discriptions) AS NVARCHAR(MAX)) AS 'Распакованные данные' FROM dbo.Cats
Результат:
Выводы:
- При распаковке, важно выбирать тип данных согласно исходным
- Сжатие эффективно при большой длине строк
Функция CAST SQL Server
на практических примерах
Резюме : в этом руководстве вы узнаете, как использовать функцию SQL Server CAST()
для преобразования значения или выражения из одного типа в другой.
Введение в SQL Server
Функция CAST()
Давайте посмотрим на следующий запрос:
SELECT 1 + '1' КАК результат; Язык кода: PHP (php)
Возвращает 2 как число:
результат ----------- 2 (затронут 1 ряд)
В этом операторе SQL Server неявно преобразует строку символов '1'
в число 1
.
При использовании двух значений с разными типами данных SQL Server попытается преобразовать меньший тип данных в больший, прежде чем он сможет обработать вычисление. Это известно как неявное преобразование в SQL Server.
В отличие от неявных преобразований, у нас есть явные преобразования, при которых вы вызываете функцию CAST()
для явного преобразования значения одного типа в другой:
SELECT 1 + CAST(1 AS INT) результат; Язык кода: PHP (php)
Синтаксис функции CAST()
: этот синтаксис:
-
выражение
может быть буквальным значением или допустимым выражением любого типа, которое будет преобразовано. -
target_type
— целевой тип данных, в который вы хотите преобразовать выражение. Он включает в себяINT
,BIT
,SQL_VARIANT
и т. д. Обратите внимание, что это не может быть псевдонимом типа данных. -
длина
— необязательное целое число, указывающее длину целевого типа. Длина
Функция CAST()
возвращает выражение, преобразованное в целевой тип данных.
SQL Server
CAST()
примеры функций
Давайте рассмотрим несколько примеров использования функции CAST()
.
A) Использование функции
CAST()
для преобразования десятичного числа в целое пример
В этом примере используется функция CAST()
для преобразования десятичного числа 5,95
в целое число:
SELECT CAST(5,95 AS INT) результат; Язык кода: CSS (css)
Вот вывод:
результат ----------- 5 (затронута 1 строка)
B) Использование функции
CAST()
для преобразования десятичной дроби в другую десятичную дробь другой длины
В следующем примере используется функция CAST()
для преобразования десятичного числа 5,95 в другое десятичное число с нулевой шкалой:
SELECT CAST(5,95 AS DEC(3,0)) результат; Кодовый язык: CSS (css)
Вывод следующий:
результат ------- 6
При преобразовании значений типов данных в разных местах SQL Server вернет усеченный результат или округленное значение на основе следующих правил:
From Data Type | To Data Type | Behavior |
---|---|---|
numeric | numeric | Round |
numeric | int | Truncate |
numeric | money | Round |
деньги | целое число | округление |
деньги | числовое значение | округление |
число с плавающей запятой | 2 2 | Truncate |
float | numeric | Round |
float | datetime | Round |
datetime | int | Round |
C) Using the
CAST()
пример функции для преобразования строки в значение даты и времени
В этом примере функция CAST()
используется для преобразования строки '2019-03-14'
в дату и время:
ВЫБЕРИТЕ CAST('2019-03-14' AS DATETIME) результат; Язык кода: PHP (php)
Вывод:
результат ----------------------- 2019-03-14 00:00:00. 000 (затронута 1 строка) Язык кода: CSS (css)
D) Использование функции
CAST()
с арифметическими операторами
Мы будем использовать таблицы sales.orders
и sales.order_items
из примера базы данных для демонстрации:
Следующий оператор использует Функция CAST()
для преобразования ежемесячных продаж в 2017 году в целочисленные значения.
ВЫБЕРИТЕ МЕСЯЦ(дата_заказа) месяц, CAST(SUM(количество * list_price * (1 - скидка)) AS INT) сумма ОТ продаж.заказов o ВНУТРЕННЕЕ СОЕДИНЕНИЕ sales.order_items i ON o.order_id = i.order_id ГДЕ ГОД(дата_заказа) = 2017 ГРУППА ПО МЕСЯЦ(дата_заказа) СОРТИРОВАТЬ ПО месяц; Язык кода: PHP (php)
На следующем рисунке показан вывод:
В этом руководстве вы узнали, как использовать SQL Server 9.0005 Функция CAST() для преобразования значения из одного типа в другой.
Функция SQL Server CAST()
SQL Server Функция CAST()
преобразует выражение одного типа данных в другой тип данных.
Рекомендуется использовать функцию TRY_CAST() вместо функции CAST()
для минимизации ошибок.
CAST(выражение AS final_data_type(длина))
Параметры
выражение: Любое допустимое выражение, которое необходимо преобразовать.
final_data_type: Целевой тип данных, в который вы хотите преобразовать данное выражение. Это необязательный параметр.
длина: Необязательное целое число, указывающее длину целевого типа данных.
Возвращаемое значение
Возвращает данное выражение, преобразованное в целевой тип данных. Он возвращает ошибку при преобразовании нечислового значения char, nchar, varchar или nvarchar в десятичное, плавающее, целое или числовое.
Возвращает ошибку при преобразовании пустой строки в тип данных int или numeric.
При преобразовании типов данных с разными десятичными знаками функция CAST()
либо усекает результирующее значение, либо округляет его до большего или меньшего значения.
От | К | Поведение |
---|---|---|
числовой | Числовой | Круглый |
числовой | Интерн. | Обрезать |
числовой | Деньги | Круглый |
деньги | Интерн. | Круглый |
деньги | числовой | Круглый |
плавать | инт | Обрезать |
плавать | числовой | Круглый |
плавать | дата и время | Круглый |
дата и время | инт | Круглый |
Пример 1:
В следующем примере десятичное число преобразуется в целочисленный тип данных.
SELECT CAST(22.24 AS int) AS Результат;
Пример 2:
При преобразовании типов данных с разными десятичными знаками функция CAST()
либо усекает результирующее значение, либо округляет его до большего или меньшего значения.
SELECT CAST(22.24 AS dec(3,1)) AS Result1, CAST(22,24 AS dec(3,0)) AS Result2;
Пример 3:
В следующем примере функция CAST()
используется для преобразования строкового выражения в значение даты и времени.
SELECT CAST('23.11.2022' КАК дата-время) как результат;
Пример 4:
В следующем примере CAST()
используется для объединения несимвольного значения в строковое выражение.
Используется с окладом
, который имеет целочисленный тип и преобразует его в строковое значение.