我有一个名为value
的列,其中包含字符串以及数字作为数据,例如:
我需要一种方法来只检索实际数字的结果(另外,还有<= 180
)。
上面的预期结果应该是:18, 150
和16, 50
,但我也会收到带字符串的结果。
我从其他SO问题中尝试过这个问题:
SELECT *
FROM `contentvalues`
WHERE (
contentid =16
OR contentid =18
)
AND `value` <= 180
AND value NOT LIKE '%[a-z0-9]%'
但这没效果。
有人能指出我正确的方向吗?
答案 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以获取更多信息。