我在列中有一个串联字符串,名称为3-123456-ABC
。
我需要将值按连字符分隔并显示在3
的单独列中。
我最初尝试失败的第一个column
本身。请指导。以下是我的查询:
select SUBSTR('3-123456-ABC', 3, Instr('3-123456-ABC', '-', -1, 1) -1) from dual;
上面的查询给我的结果是123456-ABC
,这是不正确的。请指导。
答案 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的手册,我们可以看到:
可以通过将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时,它会切到字符串的末尾。