首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REGEXP_SUBSTR函数等价于Oracle9i?

REGEXP_SUBSTR函数等价于Oracle9i?
EN

Stack Overflow用户
提问于 2018-10-29 06:55:30
回答 1查看 1.3K关注 0票数 1

Oracle9i中的regexp_substr是否有等效的函数。

我知道regexp_substr是在甲骨文10g之后出现的。

试图找出一种方法,以便在Oracle 9i中使用相同的函数逻辑。

我有这样的数据

代码语言:javascript
复制
0/6/03/19
0/6/3/19
0/1/3/09

我希望通过用/分隔字符串来分别选择值。

我尝试使用substrinstr,但这不是通用的,因为斜杠之间的字符串长度可能会改变。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-29 07:35:28

不幸的是,您只能将instrsubstr组合用作:

代码语言:javascript
复制
with t as
(
  select '0/6/03/19' as str from dual union all
  select '0/6/3/19' from dual
)
select substr(str,1,instr(str,'/',1,1)-1) str1,
       substr(str,instr(str,'/',1,1)+1,instr(str,'/',1,2)-instr(str,'/',1,1)-1) str2,
       substr(str,instr(str,'/',1,2)+1,instr(str,'/',1,3)-instr(str,'/',1,2)-1) str3,
       substr(str,instr(str,'/',1,3)+1,length(str)-instr(str,'/',1,3)) str4
  from t;

STR1    STR2    STR3    STR4
----    ----    ----    ----
 0       6       03      19
 0       6        3      19

如果您的DB版本为9.2,则可以使用上面的with .. as结构。

还可以按行(以非枢轴方式)获得结果,如下所示:

代码语言:javascript
复制
with t as
(
 select '/'||str||'/' as str, ID
   from
   (
    select 1 as ID, '0/6/03/19' as str from dual union all
    select 2,'0/6/3/19' from dual
   )
)
select
      distinct ID, level as piece_nr,
      substr(str,instr(str,'/',1,level)+1,instr(str,'/',1,level+1)-instr(str,'/',1,level)-1)
      as piece_value
  from ( select * from t )
connect by level <= length(str)-length(replace(str,'/',''))-1
  order by ID, level;

ID  PIECE_NR    PIECE_VALUE
--  --------  -----------
1        1           0
1        2           6
1        3           03
1        4           19
2        1           0
2        2           6
2        3           3
2        4           19
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53040238

复制
相关文章

相似问题

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