我有这个表现
(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)
要提取
CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20
我需要提取'VRD LOS ARBOLES PT'
,但使用REGEXP_SUBSTR返回'VRD LOS ARBOLES PT 20 '
请帮助我
REGEXP_SUBSTR('CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20','(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)' )
答案 0 :(得分:0)
您可能正在寻找这样的东西:
with
inputs as (
select 'CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20' address from dual
)
select regexp_substr(address,
'(CONJ|ADL|ALD|ALM|ATR|VRD).*?(TERPLN|SUITE|AGP|ALM|PT|$)') token
from inputs
;
TOKEN
---------------------
VRD LOS ARBOLES PT
关键是交替之间的含义-在这种情况下为.*?
。
但是,请注意,这是一种危险方法-如果街道名称(或其他名称)实际上包含子字符串PT
,该怎么办?
VRD康普顿谷
搜索将返回VRD COMPT
,问题出在您的数据模型,而不是您在此类数据上使用的特定查询。也许您可以要求在最后的变更之前必须留有空格;但即使那样,您在类似
的输入中也会得到错误的答案VRD庭园