在Oracle11中使用正则表达式检索列的正确数据时遇到问题。
该列的类型为varchar,如下所示:
2216xxxx
20xxxx
2355xxxx
2128xxxx
213xxxx
692xxxx
我正在使用这部分查询:
regexp_like (column_name, '^(?216*|?213*|?218*|?212*|?249*|?20*)')
过滤掉以20、216、213、218、212和249开头的行,或者以这些前缀开头的行(例如220、2216、2213等),但在结果中,我也得到了以2355开头的记录。
我确信我在正则表达式上犯了一些错误,但我找不到它。
如能提供帮助,我们将不胜感激。
p.S
我知道我可以使用一系列的"or column_name like...
",但我认为使用regexs将是更好的解决方案
您使用?
和*
不正确。改为使用这个:
^(216.*|213.*|218.*|212.*|249.*|20.*)
您不需要?
,而需要使用.*
,意思是"零到无限次数之间的任何字符(新行除外)"