如何在Oracle中分隔连接字符串?

时间:2019-03-19 10:24:58

标签: sql oracle split

我在列中有一个串联字符串,名称为3-123456-ABC。 我需要将值按连字符分隔并显示在3的单独列中。 我最初尝试失败的第一个column本身。请指导。以下是我的查询:

select SUBSTR('3-123456-ABC', 3, Instr('3-123456-ABC', '-', -1, 1) -1) from dual;

上面的查询给我的结果是123456-ABC,这是不正确的。请指导。

2 个答案:

答案 0 :(得分:2)

我得到了答案。是通过正则表达式完成的吗?

SELECT  REGEXP_SUBSTR ('3-1896042-TEMP', '[^-]+', 1, 1)    AS part_1
,       REGEXP_SUBSTR ('3-1896042-TEMP', '[^-]+', 1, 2)    AS part_2
,       REGEXP_SUBSTR ('3-1896042-TEMP', '[^-]+', 1, 3)    AS part_3
FROM    dual
;

答案 1 :(得分:0)

阅读SUBSTR的手册,我们可以看到:

  • 第一个参数是要剪切的字符串
  • 第二个参数是开始剪切的位置(为什么要在第一个字符时输入3,即应该输入1)
  • 第三个参数是要剪切的字符的长度。如果确定第一个连字符出现在索引2处,则只需要一个字符,因此所需的长度由公式“ index_of_end减去index_of_start”给出-起始索引为1

可以通过将INSTR的开始索引参数设置为负来向后搜索,但是我不确定为什么要这样做。要获得“ 3”,您要向前搜索

SUBSTR('3-123456-ABC', 1,               INSTR('3-123456-ABC', '-')   - 1)
                       ^                ^^^^^                        ^^^
                 start cutting       the end index ...        minus the start index (1)

后来获得最后一个连字符,您可以向后搜索:

SUBSTR('3-123456-ABC', INSTR('3-123456-ABC', '-', -1)   + 1)
                       ^^^^^                 ^^^^^^^    ^^^
               start cutting         the last hyphen    not including the hyphen

当您不将长度参数传递给SUBSTR时,它会切到字符串的末尾。