Преобразование VARCHAR в INT в MySQL: верная синтаксис

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования типа VARCHAR в INT используйте функцию CAST:

SQL
Скопировать код
SELECT CAST(varchar_col AS SIGNED) FROM table;

Либо можно воспользоваться функцией CONVERT:

SQL
Скопировать код
SELECT CONVERT(varchar_col, SIGNED) FROM table;

Удостоверьтесь, что содержимое столбца VARCHAR может быть правильно преобразовано в целые числа.

Кинга Идем в IT: пошаговый план для смены профессии

Искусство приведения типов

Рассмотрим более подробно методы и подходы к преобразованию VARCHAR в INT в MySQL.

Неявное приведение типов с помощью арифметики

В дополнение к функциям CAST и CONVERT можно использовать изящный метод приведения типов с применением арифметической операции – умножение на единицу: (varchar_col * 1). Этот подход позволяет изменить тип данных без использования функций:

SQL
Скопировать код
SELECT varchar_col * 1 AS int_col FROM table;

Unsigned для положительных целых чисел

Если вы уверены, что ваши данные последовательно положительны, укажите при преобразовании тип UNSIGNED:

SQL
Скопировать код
SELECT CAST(varchar_col AS UNSIGNED) FROM table;

Особенности и версия MySQL 5.5.16

Будьте внимательны: в версиях MySQL ниже 5.5.16 способы приведения типов могут отличаться. Если речь идёт о старом производственном окружении, это важно учитывать!

Исключительные ситуации и способы их решения

В процессе приведения типов могут возникнуть трудности, которые мы рассмотрим далее.

VARCHAR со символами отличными от цифровых

Если в столбце VARCHAR присутствуют символы, отличные от числовых, это может вызвать ошибку функции CAST. Эту проблему можно решить, используя регулярные выражения для отсеивания некорректных символов:

SQL
Скопировать код
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']

Номера домов (🔢): Переводятся только чистые целые числа!

SQL
Скопировать код
SELECT CAST(house_number AS INT) AS street_number FROM houses;

Результаты: [101, ❌, 103, ❌, 105]

Угол производительности

Преобразование типов, особенно когда речь идёт о больших данных, требует оптимизации производительности. Поговорим о способах приступа к оптимизации.

Улучшение загрузки запросов с помощью индексации

С целью повышения производительности создайте индекс на столбце VARCHAR, если его часто преобразуют в INT. Однако, помните, что индексация может замедлить скорость вставки данных.

SQL
Скопировать код
ALTER TABLE table ADD INDEX (CAST(varchar_col AS SIGNED));

Пакетные операции

Если вам предстоит провести масштабную миграцию или очистку данных, разделите процесс на пакеты. Такой подход поможет уменьшить нагрузку на производительность сервера базы данных.

SQL
Скопировать код
UPDATE table SET int_col = CAST(varchar_col AS SIGNED) WHERE id BETWEEN start_val AND end_val;

Полезные материалы

  1. Руководство по MySQL 8.0: Функции и операторы приведения типов – Подробное руководство по использованию функций CAST и CONVERT в MySQL.
  2. Обсуждения на Stack Overflow – Текущие обсуждения со множеством лучших практик по преобразованию типов данных в MySQL.
  3. Мини-курс по SQL: работа с типами данных – Курс для быстрого обзора типов данных в SQL и способов работы с ними.