Преобразование VARCHAR в INT в MySQL: верная синтаксис
Быстрый ответ
Для преобразования типа VARCHAR в INT используйте функцию CAST:
SELECT CAST(varchar_col AS SIGNED) FROM table;
Либо можно воспользоваться функцией CONVERT:
SELECT CONVERT(varchar_col, SIGNED) FROM table;
Удостоверьтесь, что содержимое столбца VARCHAR может быть правильно преобразовано в целые числа.
Искусство приведения типов
Рассмотрим более подробно методы и подходы к преобразованию VARCHAR в INT в MySQL.
Неявное приведение типов с помощью арифметики
В дополнение к функциям CAST и CONVERT можно использовать изящный метод приведения типов с применением арифметической операции – умножение на единицу: (varchar_col * 1)
. Этот подход позволяет изменить тип данных без использования функций:
SELECT varchar_col * 1 AS int_col FROM table;
Unsigned для положительных целых чисел
Если вы уверены, что ваши данные последовательно положительны, укажите при преобразовании тип UNSIGNED:
SELECT CAST(varchar_col AS UNSIGNED) FROM table;
Особенности и версия MySQL 5.5.16
Будьте внимательны: в версиях MySQL ниже 5.5.16 способы приведения типов могут отличаться. Если речь идёт о старом производственном окружении, это важно учитывать!
Исключительные ситуации и способы их решения
В процессе приведения типов могут возникнуть трудности, которые мы рассмотрим далее.
VARCHAR со символами отличными от цифровых
Если в столбце VARCHAR присутствуют символы, отличные от числовых, это может вызвать ошибку функции CAST. Эту проблему можно решить, используя регулярные выражения для отсеивания некорректных символов:
SELECT CAST(REGEXP_REPLACE(varchar_col, '\\D', '') AS SIGNED) AS int_col FROM table;
Переполнение и усечение: ограничения типа данных
Случается, что при приведении VARCHAR к INT может возникнуть риск переполнения или усечения данных. Диапазон значений для INT в MySQL находится в пределах от -2147483648 до 2147483647 для положительных и от 0 до 4294967295 для отрицательных чисел.
Визуализация
Присвоение VARCHAR
значениям INT
в MySQL можно сравнить с присвоением номеров дому:
Дома (🏠): ['101', '102a', '103', 'OneZeroFour', '105']
Номера домов (🔢): Переводятся только чистые целые числа!
SELECT CAST(house_number AS INT) AS street_number FROM houses;
Результаты: [101, ❌, 103, ❌, 105]
Угол производительности
Преобразование типов, особенно когда речь идёт о больших данных, требует оптимизации производительности. Поговорим о способах приступа к оптимизации.
Улучшение загрузки запросов с помощью индексации
С целью повышения производительности создайте индекс на столбце VARCHAR, если его часто преобразуют в INT. Однако, помните, что индексация может замедлить скорость вставки данных.
ALTER TABLE table ADD INDEX (CAST(varchar_col AS SIGNED));
Пакетные операции
Если вам предстоит провести масштабную миграцию или очистку данных, разделите процесс на пакеты. Такой подход поможет уменьшить нагрузку на производительность сервера базы данных.
UPDATE table SET int_col = CAST(varchar_col AS SIGNED) WHERE id BETWEEN start_val AND end_val;
Полезные материалы
- Руководство по MySQL 8.0: Функции и операторы приведения типов – Подробное руководство по использованию функций CAST и CONVERT в MySQL.
- Обсуждения на Stack Overflow – Текущие обсуждения со множеством лучших практик по преобразованию типов данных в MySQL.
- Мини-курс по SQL: работа с типами данных – Курс для быстрого обзора типов данных в SQL и способов работы с ними.