我正在尝试使用字符'_'的最后一个索引在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
我在这里做错了什么线索?
答案 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