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

SELECT * 
FROM myTable 
WHERE isANumber(col1) = true

当前回答

返回数字行

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

SELECT * FROM myTable WHERE col1 > 0;

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

返回非数字行

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

SELECT * FROM myTable WHERE !col1 > 0;

其他回答

SELECT * FROM myTable WHERE sign (col1)!=0

当然sign(0)是0,但是你可以把你的查询限制为…

SELECT * FROM myTable WHERE sign (col1)!=0 or col1=0

更新:这不是100%可靠,因为“1abc”将返回符号 1,但是“ab1c”将返回0…所以这只适用于不以数字开头的文本。

在我的计算机上,另一个似乎比REGEXP更快的替代方法是

SELECT * FROM myTable WHERE col1*0 != col1;

这将选择col1以数值开头的所有行。

我发现这很有效

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

返回数字行

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

SELECT * FROM myTable WHERE col1 > 0;

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

返回非数字行

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

SELECT * FROM myTable WHERE !col1 > 0;

这在大多数情况下都是可行的。

SELECT * FROM myTable WHERE concat('',col1 * 1) = col1

不适合非标准的数字,比如

1 e4 1.2 e5 123. (落后于小数)