如何从MySQL查询中排除非数字列结果?

时间:2015-12-28 07:44:54

标签: mysql sql

我有一个名为value的列,其中包含字符串以及数字作为数据,例如:

  • 有争议
  • 16,200
  • 18,150
  • 47,Foo
  • 16,红色
  • 16,50
  • 18,GREEN

我需要一种方法来只检索实际数字的结果(另外,还有<= 180)。

上面的预期结果应该是:18, 15016, 50,但我也会收到带字符串的结果。

我从其他SO问题中尝试过这个问题:

SELECT * 
FROM  `contentvalues` 
WHERE (
contentid =16
OR contentid =18
)
AND `value` <= 180
AND value NOT LIKE  '%[a-z0-9]%'

但这没效果。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

根据this

... AND value REGEXP ('[0-9]')

...但某人的博客永远不是最好的来源。实际上,匹配包含数字的所有内容。更好的是

... AND value REGEXP ('^[0-9]+$')

高于正则表达式

^      "From the begining of the string..."
[0-9]  "There should be a number..."
+      "actually exactly 1 or more of those numbers"
$      "and the the string should just end."

答案 1 :(得分:0)

这是一个不需要REGEXP()函数的解决方案,它可能并非在所有RDBMS中都可用:

SELECT * 
FROM  `contentvalues` 
WHERE (contentid = 16 OR contentid =18)
    AND concat('',value * 1) = value

只要value列中的数字不以科学记数法,尾随小数或其他奇怪格式出现,这将有效。请阅读this SO article以获取更多信息。