【问题标题】:MySQL REGEXP integer comparisonMySQL REGEXP 整数比较
【发布时间】:2012-09-15 08:26:56
【问题描述】:

我正在使用 REGEXP 来匹配 LONGTEXT 列中大量文本中的特定字符串。例如:

Text text text text text
 text text text text text
 text text SOLD: 75/101 text
 text text text text text

所以我的查询看起来像这样:

SELECT * FROM `test` WHERE `file` REGEXP
'SOLD:[ ]{1}[0-9]{1,2,3}/[0-9]{1,2,3}'

这将正确匹配 SOLD: 75/101 字符串。

但是有可能对分子进行比较吗?比如,找到所有SOLD: >=75/101

比较数字将是用户通过 $_POST 输入的数字。我知道 REGEXP 并不是真正用于比较数字,但有没有办法用 regexp 捕获字符串,然后以其他方式对整数进行比较?

【问题讨论】:

  • 你可以创建存储过程来封装任何逻辑
  • 您是否只需要考虑76/101123/101 之类的分数,还是还必须考虑70/80(当然,它大于75/101)?
  • @TimPietzcker 是的,我也必须考虑前两个。我对比较整个分数不感兴趣,只比较分子。

标签: mysql regex comparison


【解决方案1】:

如果您只需要查看分子,如您的评论中所述,那么

SELECT * FROM mytable WHERE mycolumn REGEXP 
"SOLD: ([1-9][0-9]{2,}|[8-9][0-9]|7[5-9])/101";

应该可以。

顺便说一句,[0-9]{1,2,3} 在大多数正则表达式中都是一个语法错误(我不知道 MySQL 是如何处理它的);指定范围的正确方法是[0-9]{1,3}

【讨论】:

  • 用户输入的 $_POST 值是 80 还是 90 是什么?
  • 啊,对。我没有足够彻底地阅读那部分。抱歉,MySQL 正则表达式不支持捕获组,所以我想你真的必须为此使用自定义函数。不幸的是,我对 MySQL 的了解不够,无法提出解决方案。
  • @Norse:意思是“2个或更多”。
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2013-08-24
  • 2013-07-10
相关资源
最近更新 更多