我希望从varchar列中过滤掉5位数的ID(不仅包含ID,还包含更多文本),我必须避免选择包含"的6个或更多数字ID。偶然"搜索到的5个数字,所以简单地"喜欢"不行。
我试过" regexp_like"在搜索到的ID之前和之后[^0-9]*
,但看起来好像0到n重复(*
)被否定的数字选择(^
)弄糊涂了。
select *
from
( select 1 nr, '12345' txt from dual
union select 2 nr, '612345' txt from dual
union select 3 nr, 'B12345' txt from dual
union select 4 nr, '7612345' txt from dual
union select 5 nr, '7 12345' txt from dual
union select 6 nr, 'x12345x' txt from dual
union select 7 nr, 'x12x45x' txt from dual
union select 8 nr, ' 12345' txt from dual
)
where regexp_like (txt,'[^0-9]*12345[^0-9]*')
order by nr
我需要选择" 12345"的所有出现,除了带有前导或尾随其他数字的那些(例如" 612345")。应允许前导或尾随字符,空白,其他符号或行尾/结尾。 因此,只应选择第1,3,5,6和8行。
你能帮帮我吗?非常感谢!
答案 0 :(得分:0)
当您使用*
时,您正在搜索0次或更多次匹配,但仍然匹配612345
,您可以执行以下操作:
where regexp_like(txt, '(^|[^0-9]+)12345([^0-9]+|$)')
(使用+
确保您匹配至少一个非数字字符|
或位于开头或结尾处)