首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle子字符串从字符到字符

Oracle子字符串从字符到字符
EN

Stack Overflow用户
提问于 2019-03-05 21:03:49
回答 2查看 68关注 0票数 0

我有一个包含多个/字符的字符串。我需要在每个字符之前/之后修剪字符串。示例字符串"231/19/2812-27/1“。每个修剪都将是它自己的列。

代码语言:javascript
复制
Row1 | Row2 | Row3 | Row4 | Row5
231  | 19   | 2812 | 27   |  1

请不要使用正则表达式。谢谢。

编辑:编辑字符串的裁剪和表示为表格的方式(27/1)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-05 22:15:29

尝尝这个

代码语言:javascript
复制
select SUBSTR('231/19/2812-27/1',1,instr('231/19/2812-27/1','/',1)-1) col1,
SUBSTR('231/19/2812-27/1',instr('231/19/2812-27/1','/',1)+1,(instr('231/19/2812-27/1','/',1,2)-instr('231/19/2812-27/1','/',1))-1) col2 ,
SUBSTR('231/19/2812-27/1',instr('231/19/2812-27/1','/',1,2)+1,(instr('231/19/2812-27/1','-',1,1)-instr('231/19/2812-27/1','/',1,2))-1) col3 ,
SUBSTR('231/19/2812-27/1',(instr('231/19/2812-27/1','-',1,1)+1)) col4
from dual;
票数 1
EN

Stack Overflow用户

发布于 2019-03-05 22:15:24

首先,我建议用行而不是列来表示结果,因为在后一种情况下,您必须知道构建查询所需的列数,或者使用动态SQL,这在您的情况下是相当复杂且绝对多余的。

试试这个:

代码语言:javascript
复制
 with t as (select '231/19/2812-27/1' as str from dual)
 select regexp_substr(str,'[^/]+',1,level) as val
 from t
 connect by regexp_substr(str,'[^/]+',1,level) is not null

是的,这是一个正则表达式,在我看来,这是实现您想要的结果的最简单方法。如果您不想使用它,那么编写您自己的函数来拆分字符串。

但是,如果您仍然希望以列的形式表示结果,请尝试以下方法:

代码语言:javascript
复制
--edit  removed a , at the end
SELECT REGEXP_SUBSTR(t.value, '[^/]+', 1, 1) col1,
       REGEXP_SUBSTR(t.value, '[^/]+', 1, 2) col2,
       REGEXP_SUBSTR(t.value, '[^/]+', 1, 3) col3,
       REGEXP_SUBSTR(t.value, '[^/]+', 1, 4) col4
FROM (select '231/19/2812-27/1' as value from dual) t;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55003502

复制
相关文章

相似问题

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