是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
当前回答
返回数字行
我发现解决方案与以下查询和工作为我:
SELECT * FROM myTable WHERE col1 > 0;
这个查询返回的行只包含大于0的数字列col1
返回非数字行
如果你想检查列不是数字,试试这个技巧(!Col1 > 0):
SELECT * FROM myTable WHERE !col1 > 0;
其他回答
您可以使用正则表达式的mor细节https://dev.mysql.com/doc/refman/8.0/en/regexp.html
我用这个^([,|.]?[0-9])+$。这个函数允许对小数和浮点数进行句柄处理
SELECT
*
FROM
mytable
WHERE
myTextField REGEXP "^([,|.]?[0-9])+$"
我建议:如果你的搜索很简单,你可以使用'
column*1 = column
' operator interesting:)是工作,并且比varchar/char字段更快
SELECT * FROM myTable WHERE column = 1;
ABC*1 => 0 (NOT EQU **ABC**)
AB15*A => 15 (NOT EQU **AB15**)
15AB => 15 (NOT EQU **15AB**)
15 => 15 (EQUALS TRUE **15**)
如果你的数据是" test " " test0 " " test1111 " " 111test " " 111 "
选择所有数据类型为简单整型的记录:
SELECT *
FROM myTable
WHERE col1 REGEXP '^[0-9]+$';
结果:‘111’
(在正则表达式中,^表示开始,$表示结束)
使用实例选择存在整数或十进制数的所有记录。
SELECT *
FROM myTable
WHERE col1 REGEXP '^[0-9]+\\.?[0-9]*$'; - for 123.12
结果:'111'(与上一个示例相同)
最后,要选择number存在的所有记录,使用以下命令:
SELECT *
FROM myTable
WHERE col1 REGEXP '[0-9]+';
结果:'test0'和'test1111'和'111test'和'111'
在我的计算机上,另一个似乎比REGEXP更快的替代方法是
SELECT * FROM myTable WHERE col1*0 != col1;
这将选择col1以数值开头的所有行。
这在大多数情况下都是可行的。
SELECT * FROM myTable WHERE concat('',col1 * 1) = col1
不适合非标准的数字,比如
1 e4 1.2 e5 123. (落后于小数)