Si estaba usando 11g, podría usar regexp_count
para determinar el número de veces que existe un patrón en la cadena y alimentarlo en la regexp_instr
regexp_instr(str,
'[[:digit:]]',
1,
regexp_count(str, '[[:digit:]]')
)
Ya que estás en 10g, sin embargo, la opción más sencilla es probablemente para revertir la cadena y restar la posición que se encuentra a partir de la longitud de la cadena
length(str) - regexp_instr(reverse(str),'[[:digit:]]') + 1
Ambos enfoques deben trabajar en 11g
SQL> ed
Wrote file afiedt.buf
1 with x as (
2 select '500 Oracle Parkway, Redwood Shores, CA' str
3 from dual
4 )
5 select length(str) - regexp_instr(reverse(str),'[[:digit:]]') + 1,
6 regexp_instr(str,
7 '[[:digit:]]',
8 1,
9 regexp_count(str, '[[:digit:]]')
10 )
11* from x
SQL>/
LENGTH(STR)-REGEXP_INSTR(REVERSE(STR),'[[:DIGIT:]]')+1
------------------------------------------------------
REGEXP_INSTR(STR,'[[:DIGIT:]]',1,REGEXP_COUNT(STR,'[[:DIGIT:]]'))
-----------------------------------------------------------------
3
3
No hay 3 o 1 en su ejemplo, creo que hizo algo funky allí con [[: digit:]]. Además, primero dice que el resultado debe ser 1 y luego dice que debería ser 3. Por favor, aclare. Finalmente, ¿puede haber otros caracteres que no sean dígitos en la cadena después del dígito final? –
Cuando ejecuté regexp_instr con una cadena diferente (Unidad 4/22-24 Adams Pde) el resultado fue 6, que, en ese caso, era el índice del primer número. – MissPiplup
Hice un error tipográfico allí. Para el ejemplo proporcionado, debe devolver 1. Si tuviera que hacer que busque el último número, debería escupir 3 - el índice del segundo '0'. – MissPiplup