2015-12-28 82 views
0

我有一列,叫做value,其包括串以及数字作为数据,例如:如何从MySQL查询中排除非数字列结果?

  • 内容识别
  • 16,200
  • 18,150
  • 47,Foo
  • 16,红色
  • 16,50
  • 18,绿色

我需要一种方法来检索仅是实际数字的结果(和,另外,是<= 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

根据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." 
+0

谢谢!对不起 - 应该把它放在上面 - 但是你是否知道排除同时包含数字和字母的值?例如:RED123? – MeltingDog

+1

如果当前的答案不包括这种情况下,使用这个:REGEXP('^ [0-9] + $') –

+0

啊,奇怪,它拿起我存储在表格中的一些HTML(具体来说,Google Map iframes ) – MeltingDog

0

这里是一个解决方案,它不需要REGEXP()功能,这可能不是所有的RDBMS可用:

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

这将工作只要value列中的数字不以科学记数法显示,并带有尾随小数或其他奇怪的格式。阅读this SO article了解更多信息。