"regexp-like" 在 Oracle 中返回不准确的结果

"regexp-like" in Oracle returning inaccurate results

我在 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...”,但我认为使用正则表达式会是更好的解决方案

您使用的 ?* 不正确。用这个代替:

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

您不需要 ?,您需要使用 .*,这意味着 "any character (except new line), between zero and an unlimited amount of times"