"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"
我在 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"