提取两个参数之间的值oracle

时间:2017-02-28 03:52:24

标签: sql oracle

我正在尝试从' 123 | 01-DEC-17 | -123'中提取字符串 01-DEC-17 。但我没有得到理想的输出:

SELECT SUBSTR('123|01-DEC-17|-123', INSTR('123|01-DEC-17|-123','|', 1)+1, INSTR('123|01-DEC-17|-123', '|',-1)+1)
FROM DUAL;

输出为01-DEC-17|-123。但是所需的输出是01-DEC-17。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

使用regexp_substr()。这是一种方法:

select trim(both '|' from regexp_substr(col, '|[^|]+|'))

或者,如果你知道这些职位是固定的,你可以使用substr()

select substr(col, 5, 9)

答案 1 :(得分:0)

试试这个:

with t (col)
as (
    select '123|01-DEC-17|-123'
    from dual
    )
select substr(
    col, 
    instr(col, '|') + 1, 
    instr(col, '|', 1, 2) - instr(col, '|') - 1
    )
from t;

instr(col, '|') - 第一次出现|的位置 instr(col, '|', 1, 2) - 第二次出现|

的位置

对于substr(column, start_position, length),我们需要子串的长度作为substr的第三个参数,因此,

instr(col, '|', 1, 2) - instr(col, '|') - 1将为我们提供所需的长度。