是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
当前回答
尝试除法/1
select if(value/1>0 or value=0,'its a number', 'its not a number') from table
其他回答
这在大多数情况下都是可行的。
SELECT * FROM myTable WHERE concat('',col1 * 1) = col1
不适合非标准的数字,比如
1 e4 1.2 e5 123. (落后于小数)
您可以使用正则表达式的mor细节https://dev.mysql.com/doc/refman/8.0/en/regexp.html
我用这个^([,|.]?[0-9])+$。这个函数允许对小数和浮点数进行句柄处理
SELECT
*
FROM
mytable
WHERE
myTextField REGEXP "^([,|.]?[0-9])+$"
这个答案与Dmitry类似,但它允许小数以及正数和负数。
select * from table where col1 REGEXP '^[[:digit:]]+$'
你可以使用CAST
SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")
仍然缺少这个简单的版本:
SELECT * FROM myTable WHERE `col1` + 0 = `col1`
(加法应该比乘法快)
或者更慢的版本:
SELECT *,
CASE WHEN `col1` + 0 = `col1` THEN 1 ELSE 0 END AS `IS_NUMERIC`
FROM `myTable`
HAVING `IS_NUMERIC` = 1