我要分道扬镳
500 Oracle Parkway.Redwood Shores.*.=13现在,我有了一个Substr1/2/4的工作解决方案。
SELECT '500 Oracle Parkway.Redwood Shores.*.=13' string1,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','.[^.]+')
"SUBSTR1" ,
replace(REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+
[^.]+'),'.',null) "SUBSTR2" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+.[$.]+[^.]')
"SUBSTR3" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[^=]+$')
"SUBSTR4"
FROM DUAL;但是,Substr3包含'=‘。我至少想要一个“.*”。或“*”
请给我一个提示,如何在regexp中“排除”任何字符(例如'=')?
任何帮助都是非常感谢的!
谢谢
已解决参见SUBSTR3.1
SELECT
'500 Oracle Parkway.Redwood Shores.*.=13' string1,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','.[^.]+')
"SUBSTR1" ,
replace(REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+
[^.]+'),'.',null) "SUBSTR2" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[$.]+.[$.]+
[^.]') "SUBSTR3" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[^.]+',1,3)
"SUBSTR3.1" ,
REGEXP_SUBSTR('500 Oracle Parkway.Redwood Shores.*.=13','[^=]+$')
"SUBSTR4"
FROM DUAL;发布于 2017-05-10 14:01:33
对于Alex来说,如果列表中缺少一个元素,'[^.]+'格式的正则表达式就会失败。它将默默地返回不相关的数据。请用这个表格代替。注意,我从第一个例子中删除了这个城市。试一试,你可能会感到惊讶:
with t (str) as (
select '500 Oracle Parkway..*.=13' from dual union
select 'One Microsoft Way.Redmond.Washington.=27' from dual
)
select str,
regexp_substr(str, '(.*?)(\.|$)', 1, 1, NULL, 1) as substr1,
regexp_substr(str, '(.*?)(\.|$)', 1, 2, NULL, 1) as substr2,
regexp_substr(str, '(.*?)(\.|$)', 1, 3, NULL, 1) as substr3,
ltrim(regexp_substr(str, '(.*?)(\.|$)', 1, 4, NULL, 1), '=') as substr4
from t;有关更多信息,请参见这里:Split comma separated values to columns in Oracle
发布于 2017-05-10 10:06:00
看起来,您正在尝试基于句点来标记源字符串,并且它们(可能)从第四个令牌中移除前面的相等号。您所使用的用于“subthing3.1”的解决方案可以用于所有这些:
with t (str) as (
select '500 Oracle Parkway.Redwood Shores.*.=13' from dual
union all select 'One Microsoft Way.Redmond.Washington.=27' from dual
)
select str,
regexp_substr(str, '[^.]+', 1, 1) as substr1,
regexp_substr(str, '[^.]+', 1, 2) as substr2,
regexp_substr(str, '[^.]+', 1, 3) as substr3,
ltrim(regexp_substr(str, '[^.]+', 1, 4), '=') as substr4
from t;
STR SUBSTR1 SUBSTR2 SUBSTR3 SUBSTR4
---------------------------------------- -------------------- -------------------- ---------- -------
500 Oracle Parkway.Redwood Shores.*.=13 500 Oracle Parkway Redwood Shores * 13
One Microsoft Way.Redmond.Washington.=27 One Microsoft Way Redmond Washington 27 https://stackoverflow.com/questions/43888870
复制相似问题