【发布时间】:2020-05-14 08:57:59
【问题描述】:
我正在寻找可以在 MySql 查询中使用的正则表达式
我要归档的是一个查询,它过滤所有行,其中有一个值为“xx% to Fire Resistance”的字符串,而 xx 是一个动态值,比如说 22,但我不只想要所有行22,但所有行 22 AND higher。这有可能吗?
我可以在第二步中使用 php 过滤它,但最初的结果会太大而无法实际使用。
我目前拥有的(并不能正常工作,因为它只是过滤给定字符串之前的数字)
SELECT * FROM items WHERE `mods` REGEXP '\b(\d+(?:\.\d+)?)% to Fire Resistance\b'
理论上我需要什么
SELECT * FROM items WHERE `mods` REGEXP '\b(\d+(?:\.\d+)?)% to Fire Resistance\b' > 22
一个示例“mods”字段内容
Some more text;+170 to Accuracy Rating;+25% to Fire Resistance;+4 to Armour;+6 to Evasion Rating;+43 to maximum Life;+39% to Lightning Resistance;Some more text;Some more text;
【问题讨论】:
-
如果要在 MySQL 中使用正则表达式,只能在 v.8+ 中使用
\b。你的 MySQL 版本是多少? -
耐火有效值的范围是多少?
-
@ Wiktor mysqld Ver 5.7.29-0ubuntu0.16.04.1 for Linux on x86_64 ((Ubuntu)) 应该是我使用的版本,但如果有必要可以更新。 @danblack 范围应该是 1-99%
-
在旧的 MySQL 版本中尝试
REGEXP '[[:<:]](2[2-9]|[3-9][0-9]|[1-9][0-9]{2,})([.][0-9]+)?% to Fire Resistance[[:>:]]'。[[:<:]]和[[:>:]]是\bs,非捕获组应该变成捕获组。 -
@WiktorStribiżew 先生,我的 5 小时痛苦,这正是我所需要的,它就像一个魅力,我什至有点理解它的作用:D 谢谢
标签: php mysql sql regex regular-language