Есть ли способ определить, является ли значение числом в запросе MySQL? Такие как
SELECT *
FROM myTable
WHERE isANumber(col1) = true
mysql
sql
where-clause
Urbycoz
источник
источник
Ответы:
Это должно работать в большинстве случаев.
Это не работает для нестандартных номеров, таких как
1e4
1.2e5
123.
(конечный десятичный)источник
Вы также можете использовать регулярные выражения ... это будет выглядеть так:
Ссылка: http://dev.mysql.com/doc/refman/5.1/en/regexp.html
источник
WHERE col1 NOT REGEXP...
и для случая, когда вы можете иметь десятичную точку, используйте регулярное выражение:^[0-9\.]+$
Если ваши данные «test», «test0», «test1111», «111test», «111»
Чтобы выбрать все записи, где данные являются простыми int:
Результат: '111'
(В регулярном выражении ^ означает начало, а $ означает конец)
Чтобы выбрать все записи, в которых существует целое или десятичное число:
Результат: «111» (аналогично последнему примеру)
Наконец, чтобы выбрать все записи, где существует номер, используйте это:
Результат: «test0» и «test1111» и «111test» и «111»
источник
REGEXP '^[+\-]?[0-9]+\\.?[0-9]*$'
Также будет соответствовать десятичным знакам со знаком (например, -1.2, +0.2, 6., 2e9, 1.2e-10 ).
Тест:
Результат:
демонстрация
источник
Возвращает числовые строки
Я нашел решение с помощью следующего запроса и работает для меня:
Этот запрос возвращает строки, имеющие только столбец с номерами больше нуля, которые
col1
Возвращает нечисловые строки
если вы хотите проверить столбец не числовой, попробуйте этот с помощью трюка (
!col1 > 0
):источник
SELECT * FROM myTable WHERE col1 = 123;
запрос будет возвращать строки, даже значение столбца123abc
Этот ответ похож на Дмитрия, но он допускает десятичные, а также положительные и отрицательные числа.
источник
использовать UDF (пользовательская функция).
Затем, когда вы запрашиваете
- возвращает 0
- возвращает 1
выберите isnumber (mycol) mycol1, col2, colx из таблицы; - вернет 1 и 0 для столбца mycol1
- Вы можете улучшить функцию, чтобы принимать десятичные дроби, научные записи и т. д ...
Преимущество использования UDF заключается в том, что вы можете использовать его слева или справа от сравнения «где предложение». это значительно упрощает ваш SQL перед отправкой в базу данных:
надеюсь это поможет.
источник
Еще одна альтернатива, которая кажется быстрее чем REGEXP на моем компьютере:
Это выберет все строки, где col1 начинается с числового значения.
источник
AND col1<>0
чтобы обработать это исключение.'1a'
. Кстати: это эквивалентноWHERE col1 <> 0
- rextester.com/DJIS1493Все еще отсутствует эта простая версия:
(сложение должно быть быстрее по мере умножения)
Или самая медленная версия для дальнейшей игры:
источник
'a' + 0 = 'a'
ИСТИНАЯ рекомендую: если ваш поиск прост, вы можете использовать `
Оператор интересный :) работает и быстрее чем на полях varchar / char
источник
select 'aaa123' >= 0
иselect '123aaa' >= 0
возвращает истину?ofcourse sign (0) равен нулю, но тогда вы можете ограничить свой запрос ...
источник
источник
Я обнаружил, что это работает довольно хорошо
источник
col1 <> 0
и дает ложный положительный результат для1a
- rextester.com/HLORBZ1242Попробуйте разделить / 1
источник