2015-12-28 103 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瞭解更多信息。