MySQL正则表达式 - 有问题

时间:2015-10-14 22:27:04

标签: mysql regex

我在转换某些正则表达式以使用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}$'  

过去一小时我环顾四周,尝试了很多不同的东西,但我在这里没有运气。有人可能会指出我可能做错的正确方向吗?

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}$'  

http://sqlfiddle.com/#!9/9eecb7d/25641