Oracle中的“regexp-like”返回不准确的结果

时间:2015-11-25 14:55:24

标签: regex oracle regexp-like

我在使用Oracle 11中的正则表达式检索列的正确数据时遇到了问题。

该列的类型为varchar,如下所示:

2216xxxx
20xxxx
2355xxxx
2128xxxx
213xxxx
692xxxx

我正在使用这部分查询:

regexp_like (column_name, '^(?216*|?213*|?218*|?212*|?249*|?20*)')

过滤掉以20,216,213,218,212和249开头的行,或者以这些前缀开头的行,前面加上2(例如220,2216,2213等),但是结果我也得到了从2355开始的记录。

我确信我在使用正则表达式时犯了一些错误,但我无法找到它。

非常感谢一些帮助。

P.S

我知道我可以使用一系列“or column_name like...”,但我认为使用正则表达式会是更好的解决方案

1 个答案:

答案 0 :(得分:1)

您错误地使用了?*。请改用:

^(216.*|213.*|218.*|212.*|249.*|20.*)

您不需要?,您需要使用.*,这意味着"任何字符(新行除外),在零和无限次数之间"