Puedes usar SUBSTR
y INSTR
:
select substr('john.abc_1234', 1, instr('john.abc_1234', '_') -1)
from dual
Actualizar
Además, si está ejecutando desde Oracle 10g en adelante, puede tomar la ruta Regex, que manejaría las excepciones de manera más poderosa.
Aquí hay algunos enlaces sobre cómo hacerlo en Oracle:
- http://psoug.org/reference/regexp.html
- http://psoug.org/snippet/Regular -Expresiones--Regexp-Cheat-Sheet_856.htm
- http://www.regular-expressions.info/oracle.html