我在使用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...
”,但我认为使用正则表达式会是更好的解决方案
答案 0 :(得分:1)
您错误地使用了?
和*
。请改用:
^(216.*|213.*|218.*|212.*|249.*|20.*)
您不需要?
,您需要使用.*
,这意味着"任何字符(新行除外),在零和无限次数之间"