是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
当前回答
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…所以这只适用于不以数字开头的文本。
其他回答
返回数字行
我发现解决方案与以下查询和工作为我:
SELECT * FROM myTable WHERE col1 > 0;
这个查询返回的行只包含大于0的数字列col1
返回非数字行
如果你想检查列不是数字,试试这个技巧(!Col1 > 0):
SELECT * FROM myTable WHERE !col1 > 0;
我建议:如果你的搜索很简单,你可以使用'
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**)
仍然缺少这个简单的版本:
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
这在大多数情况下都是可行的。
SELECT * FROM myTable WHERE concat('',col1 * 1) = col1
不适合非标准的数字,比如
1 e4 1.2 e5 123. (落后于小数)
你可以使用CAST
SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")