【问题标题】:How to exclude non-numeric column results from MySQL query?如何从 MySQL 查询中排除非数字列结果?
【发布时间】:2016-04-02 01:38:58
【问题描述】:

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

  • contentid价值
  • 16, 200
  • 18, 150
  • 47,富
  • 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]%'

但这并没有奏效。

谁能指出我正确的方向?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

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

    只要value 列中的数字不以科学记数法、尾随小数或其他奇怪格式出现,这将起作用。阅读this SO article了解更多信息。

    【讨论】:

      【解决方案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."
      

      【讨论】:

      • 谢谢!对不起 - 应该把它放在上面 - 但你知道无论如何要排除同时包含数字和字母的值吗?例如:RED123?
      • 如果当前答案不涵盖这种情况,请使用:REGEXP ('^[0-9]+$')
      • 啊,奇怪,它获取了我存储在表格中的一些 HTML(特别是谷歌地图 iframe)
      • @MeltingDog 抱歉,我刚刚编辑了上面的评论。试试新的。
      • 是的,完美!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2020-06-13
      • 2016-01-02
      • 2019-11-24
      相关资源
      最近更新 更多