Oracle子串为最后一个字符索引的列

时间:2018-04-04 23:27:05

标签: sql oracle

我正在尝试使用字符'_'的最后一个索引在Oracle中执行子字符串。

无法得到它。请查看第二次出现“ - ”的子字符串的查询。但是如果字符串只出现一次“ - ”则不起作用。

SELECT NVL(SUBSTR('TEMP_ABC', 0, INSTR('TEMP_ABC', '_',1,2)-1), 'TEMP_ABC') 
    FROM DUAL

Result  - TEMP_ABC  
Expected Result - TEMP

SELECT NVL(SUBSTR('TEMP_ABC_XYZ', 0, INSTR('TEMP_ABC_XYZ', '_',1,2)-1), 'TEMP_ABC_XYZ') 
    FROM DUAL

Result - TEMP_ABC
Expected Result - TEMP_ABC

我在这里做错了什么线索?

1 个答案:

答案 0 :(得分:1)

在instr函数中,如果在最后一个参数中使用-1,则表示最后一次出现char字符串。

instr(string, '_', -1) = last occurrence of _

因此:

select substr('TEMP_ABC',1,instr('TEMP_ABC','_',-1)-1)
from dual;

Result: TEMP

select substr('TEMP_ABC_XYZ',1,instr('TEMP_ABC_XYZ','_',-1)-1)
from dual;

Result: TEMP_ABC