Как проверить, является ли значение числом в MySQL

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

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

Для определения, является ли значение поля в MySQL числовым, воспользуйтесь REGEXP следующим образом:

SQL
Скопировать код
SELECT value REGEXP '^-?[0-9]+(\\.[0-9]+)?$' AS is_numeric FROM your_table;

Если поле value содержит число, запрос вернёт 1, в случае обратного – 0.

Использование REGEXP для определения числовых значений

При необходимости проверить, состоит ли строка только из цифр, примените регулярное выражение '^[0-9]+$'.

SQL
Скопировать код
-- SQL-запрос для поиска цифр
SELECT value, value REGEXP '^[0-9]+$' AS is_digit FROM your_table;

Работа с десятичными и числами в научной нотации

В случае работы с десятичными числами или числами в научной нотации используйте следующий REGEXP:

SQL
Скопировать код
-- SQL-запрос для десятичных и научных чисел
SELECT value REGEXP '^[0-9]+\\.?[0-9]*$' AS is_numeric FROM your_table;

Этот запрос позволит определить как целые, так и десятичные числа, включая числа в научной нотации.

Как преобразовать строку в числовой формат в MySQL

В случае необходимости преобразования строки с числовым содержимым в числовой тип воспользуйтесь приведением типов.

SQL
Скопировать код
-- SQL-запрос для приведения строки к числовому типу
SELECT value, CONCAT('', value * 1) = value AS is_numeric FROM your_table;

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

Определение чисел в строковых значениях

Чтобы определить наличие чисел в строковых данных, используйте следующий REGEXP '[0-9]+'.

SQL
Скопировать код
-- SQL-запрос для выявления чисел в строках
SELECT value, value REGEXP '[0-9]+' AS contains_digit FROM your_table;

Этот запрос поможет выявить любое числовое значение в строке.

Все виды чисел и REGEXP для их определения

Рассмотрим шаблон, способный определить все возможные числовые форматы.

SQL
Скопировать код
-- SQL-запрос для всех видов числовых форматов
SELECT value REGEXP '^[+-]?[0-9]*\\.?[0-9]+([eE][+-]?[0-9]+)?$' AS is_numeric FROM your_table;

С помощью этого REGEXP вы сможете определить все виды чисел: целые, десятичные, числа в научной нотации и другие.

Готовимся к фильтрации наших SQL-запросов

Фильтруем нежелательные строки

Для отсеивания нечисловых значений используйте оператор !.

SQL
Скопировать код
-- SQL-запрос для отсеивания нечисловых значений
SELECT * FROM your_table WHERE NOT value REGEXP '^[0-9]+$';

В результате этого запроса будут отброшены все значения, не являющиеся числами.

Обработка только положительных чисел

В случае, когда вам нужно работать только с положительными числами, используйте следующий запрос.

SQL
Скопировать код
-- SQL-запрос для отбора положительных чисел
SELECT * FROM your_table WHERE value > 0;

Он позволит исключить из результатов все отрицательные числа.

Визуализация

Воспринимайте использование REGEXP как проверку гостей перед нашей вечеринкой:

Markdown
Скопировать код
Список гостей (🔍): [🎭, '123', 🎭, 'abc', '42']

Контроль допуска гостей на мероприятие по REGEXP:

SQL
Скопировать код
SELECT value, value REGEXP '^-?[0-9]+(\\.[0-9]+)?$' AS IsNumber FROM table;

Что мы получаем после проверки:

Markdown
Скопировать код
| Гость  | Пропуск              |
| ------ | -------------------- |
| '123'  | ✅                   |
| 'abc'  | ❌                   |
| '42'   | ✅                   |

Только настоящие числа получают допуск 🎭➡️✅. Простите, 'abc', возможно в следующий раз вам повезёт!

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

  1. MySQL REGEXP — Подробнее о REGEXP в MySQL.
  2. Приведение типов — Познакомьтесь с преобразованием типов данных в MySQL.
  3. Обучение работе с REGEXP — Сервис для удобного тестирования регулярных выражений.
  4. MySQL – Regexps 101 — Изучите искусство создания REGEXP в MySQL.
  5. Справочник по SQL — Знания SQL для начинающих.