El siguiente fragmento de código de PL\SQL soluciona tanto encontrar el primer numero en un varchar como cualquier carácter. Partimos del siguiente supuesto:
En un campo de una tabla tengo direcciones que se componen del nombre de la calle, numero, portal, escalera… mi problema reside en que quiero quedarme solo con el nombre de la calle. Comprobado que todos mis registros tienen el siguiente formato: NOMBRE_CALLE (con espacios) + espacio + NUM_PORTAL + RESTO. La solución a mi problema es encontrar el primer número de cada campo y quedarme con el inicio del campo hasta ese primer número.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
3select nombre_call from mi_tabla; NOMBRE_CALL ---------------------------------------- FUENTE DE LA SALUD 5 LAS CHAJURDAS 79 B EL HIGUERAL 27 B CANTO DE LA VIRGEN 2 LAS PARRAS 64 LA DEHESA 2 TOMAS RUBIÑOS 13 SANCHO DAVILA 0 LAS POZAS 56 1 1 C |
Para realizarlo voy a utilizar las expresiones regulares con la función REGEXP_INSTR (Función que permite determinar la posición de inicio de un patrón específico en una cadena de caracteres). Utilizando la expresión regular [0-9] (Cualquier digito) esta función me devolverá la posición iniciar del primer dígito que encuentre.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
select nombre_call_tasa, regexp_instr(nombre_call_tasa,'[0-9]') as posicion from acontreras.ktmp_2015_20400_01_15 NOMBRE_CALL POSICION ---------------------------------------------------------- FUENTE DE LA SALUD 5 20 LAS CHAJURDAS 79 B 15 EL HIGUERAL 27 B 13 CANTO DE LA VIRGEN 2 20 LAS PARRAS 64 12 LA DEHESA 2 11 TOMAS RUBIÑOS 13 15 SANCHO DAVILA 0 15 LAS POZAS 56 1 1 C 11 |
Con esto ya solucionamos el problema, creamos un campo nuevo donde vamos a guardar solo el nombre de la calle y le metemos el resultado:
1 2 |
Update mi_tabla k set nombre_call_2 = regexp_replace(nombre_call, '[0-9]', '#'); |
Y ya tenemos el resultado deseado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
select nombre_call, nombre_call_2 from mi_tabla; NOMBRE_CALL NOMBRE_CALL_2 ---------------------------------------- FUENTE DE LA SALUD 5 FUENTE DE LA SALUD LAS CHAJURDAS 79 B LAS CHAJURDAS EL HIGUERAL 27 B EL HIGUERAL CANTO DE LA VIRGEN 2 CANTO DE LA VIRGEN LAS PARRAS 64 LAS PARRAS LA DEHESA 2 LA DEHESA TOMAS RUBIÑOS 13 TOMAS RUBIÑOS SANCHO DAVILA 0 SANCHO DAVILA LAS POZAS 56 1 1 C LAS POZAS |
Enlaces de interés:
• Reference Oracle