首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于regexp_substr的Oracle拆分消息

问基于regexp_substr的Oracle拆分消息
EN

Stack Overflow用户
提问于 2017-05-10 09:46:07
回答 2查看 397关注 0票数 0

我要分道扬镳

代码语言:javascript
复制
 500 Oracle Parkway.Redwood Shores.*.=13

现在,我有了一个Substr1/2/4的工作解决方案。

代码语言:javascript
复制
  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

代码语言:javascript
复制
      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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-10 14:01:33

对于Alex来说,如果列表中缺少一个元素,'[^.]+'格式的正则表达式就会失败。它将默默地返回不相关的数据。请用这个表格代替。注意,我从第一个例子中删除了这个城市。试一试,你可能会感到惊讶:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2017-05-10 10:06:00

看起来,您正在尝试基于句点来标记源字符串,并且它们(可能)从第四个令牌中移除前面的相等号。您所使用的用于“subthing3.1”的解决方案可以用于所有这些:

代码语言:javascript
复制
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     
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43888870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档