Функция CAST в MySQL Преобразование типов данных в базах данных
Рубрика по базам данных: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Рубрика MySQL: http://zametkinapolyah.ru/zame....tki-o-mysql/server-m
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd
Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223
-- MySQL сервер умеет делать преобразование строки в число автоматически
-- все зависит от контекста операции. Такое преобразование обычно называют неявным.
SELECT 1+'10';
SELECT 1+'10a';
SELECT 1+'10a25';
SELECT 1+'a10a';
SELECT CONCAT(2, " test string!");
-- Число в строку в базах данных MySQL сервера можно преобразовать явно, используя
-- специальную функцию CAST().
-- Функция CAST принимает ровно два аргумента: первый аргумент - это значение, которое необходимо преобразовать, второй аргумент - это тип данных, в который конвертируется значение.
SELECT 38.8, CAST(38.8 AS CHAR);
SELECT 38.8, CAST(38.8 AS CHAR(1));
SELECT 38.8, CONCAT(38.8);
-- Кроме того, выполнении операций сравнения, MySQL сервер пытается привести значенияя разных типов данных к одному, если такое вообще возможно, а затем сравнивать их. Но об этом мы уже говорили, ссылка будет в описании.
-- Поскольку числа с плавающей точкой не всегда могут быть представлены точно, мы можем получить неожиданные результаты при сравнении значений таких чисел.
SELECT '28015376320243458' = 28015376320243458;
SELECT '28015376320243459' = 28015376320243489;
-- Такое поведение MySQL сервера связано с тем, что происходит округление чисел:
SELECT '28015376320243459'+0.0;
-- Чтобы избежать таких ошибок, выполняйте явные преобразования строки в число, используя функцию CAST():
SELECT CAST('28015376320243459' AS UNSIGNED) = 28015376320243459;
-- Точность преобразований и округлений чисел в MySQL зависит от многих факторов: версии компилятора, архитектуры процессора, версии операционной системы и др.