Я пытался использовать регулярные выражения, перечисленные выше, но они не работают для следующего:
SELECT '12 INCHES' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
Вышеприведенное вернет 1
(TRUE
), что означает проверку строки '12 ДЮЙМОВ' относительно регулярного выражения выше, возвращает TRUE
. Это похоже на число, основанное на регулярном выражении, использованном выше. В этом случае, поскольку 12 находится в начале строки, регулярное выражение интерпретирует его как число.
Следующее вернет правильное значение (т.е. 0
), потому что строка начинается с символов вместо цифр
SELECT 'TOP 10' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
Вышеприведенное вернет 0
(FALSE
), потому что начало строки текстовое, а не числовое.
Однако, если вы имеете дело со строками, в которых цифры и буквы начинаются с цифры, вы не получите желаемых результатов. REGEXP будет интерпретировать строку как действительное число, хотя на самом деле это не так.