是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如

SELECT * 
FROM myTable 
WHERE isANumber(col1) = true

当前回答

我发现这很有效

if(col1/col1= 1,'number',col1) AS myInfo

其他回答

您可以使用正则表达式的mor细节https://dev.mysql.com/doc/refman/8.0/en/regexp.html

我用这个^([,|.]?[0-9])+$。这个函数允许对小数和浮点数进行句柄处理

SELECT
    *
FROM
    mytable
WHERE
    myTextField REGEXP "^([,|.]?[0-9])+$"

我发现这很有效

if(col1/col1= 1,'number',col1) AS myInfo

仍然缺少这个简单的版本:

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

你可以使用CAST

  SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")

返回数字行

我发现解决方案与以下查询和工作为我:

SELECT * FROM myTable WHERE col1 > 0;

这个查询返回的行只包含大于0的数字列col1

返回非数字行

如果你想检查列不是数字,试试这个技巧(!Col1 > 0):

SELECT * FROM myTable WHERE !col1 > 0;