我在转换某些正则表达式以使用MySQL查询时出现问题...
首先,这是一个http://www.regexr.com/链接... http://regexr.com/3c02t
正如你所看到的,它正如我所希望的那样。 6812是用户提供的字符串,我希望匹配以a结尾的所有实例。和3个数字字符。
但是,当我尝试将其移植到MySQL查询时,我遇到了一堵砖墙。我试着做这个查询,我没有运气。
SELECT
id
FROM
mytable
WHERE
summary REGEXP '^6812[.][0-9]{3}$'
OR
detail REGEXP '^6812[.][0-9]{3}$'
过去一小时我环顾四周,尝试了很多不同的东西,但我在这里没有运气。有人可能会指出我可能做错的正确方向吗?
答案 0 :(得分:2)
^
和$
是他们要求字符串完全匹配的锚点。具体来说,^
是开始,$
是结束。
在您提供的示例中,您没有使用这些。
(6812)\.+[0-9][0-9][0-9]
实际应该是
(6812)\.[0-9]{3}([^0-9]|$)
所以你的例子
Replace (24) 4569.000 with (24) 6812.000
blah blah blah 6812.000.
应该返回true。我们正在检查您的值,一个句点,然后是3个数字和一个非数字或字符串/列的结尾。
Regex101演示:https://regex101.com/r/sK0nN5/1
答案 1 :(得分:0)
有时候,当你有一个十进制数时,可能会发生有趣的事情。这是建议。
create table test (id decimal(10,4));
insert into test values (6812.123), (6812.1234);
select * from test
where id regexp '^6812[.period.][0-9]{3}0*$'
Result:
6812.1230
select * from test
where id regexp '^6812[.period.][0-9]{3}$'
Result: nothing
最后一个查询结果没有,因为decimal(10,4)
在小数点后产生4位数输出。因此,^6812.123$
无法比拟,因为数字实际上是6812.1230
因此,如果您在这种情况下运行,请使用0*$
在最后匹配零。
答案 2 :(得分:0)
我不确定您的问题是什么,但是如果您只需要检查4个字符以匹配,则可以从您的注册表达式中删除^
符号:
SELECT
id
FROM
mytable
WHERE
summary REGEXP '\.[0-9]{3}$'
OR
detail REGEXP '\.[0-9]{3}$'