我正在尝试从' 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
。任何帮助将不胜感激
答案 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
将为我们提供所需的长度。