【发布时间】:2017-08-03 07:31:10
【问题描述】:
我想从 varchar 列中过滤 5 位 ID(不仅包含 ID,还包含更多文本),并且我必须避免选择包含“偶然”搜索的 6 位或更多位 ID 5位数字,所以简单的“喜欢”是行不通的。
我在搜索的 ID 前后使用[^0-9]* 尝试了“regexp_like”,但看起来 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 行应该被选中。
请你帮帮我。
非常感谢!
【问题讨论】:
-
如果值为
612345 12345,那么是否应该选择? -
YES,因为“612345 12345”包含(在第二部分中)“12345”,没有直接的前导或尾随数字。