A veces nos vemos en la necesidad de saber si en el valor de un campo de una tabla en Oracle se encuentra cierto caracter o secuencia de caracteres.
Oracle cuenta con la función INSTR para llevar a cabo esta tarea. La función regresa un número entero que indica la posición dentro de la cadena de caracteres que contiene el campo de el o la secuencia de caracteres buscados. Por ejemplo la siguiente instrucción:
select ename as "Nombre", instr(ename, 'RK', 1, 1) as "Posicion de RK" from emp;
Mostrará el nombre y la posición de la cadena RK dentro del nombre:
Como se muestra en los resultados, solo la fila con el valor de CLARK en la columna Nombre tiene el valor de 4 que representa la posición inicial de la cadena RK en dicha columna.
¿Que representan los 4 valores o parámetros en la función INSTR? El primer parámetro es la cadena de caracteres donde se va a hacer la búsqueda, en este caso la columna ename de la tabla emp. El segundo parámetro es la cadena que buscamos, en este caso RK. El tercer parámetro indica a partir de cual caracter queremos hacer la búsqueda, en este caso desde el caracter 1. El cuarto y último parámetro de la función indica que número de ocurrencia queremos encontrar, en este caso la primera ocurrencia; por ejemplo si quisiéramos encontrar la segunda ocurrencia de la cadena R en el Nombre sería:
select ename as "Nombre", instr(ename, 'R', 1, 2) as "Posicion de RK" from emp;
Lo que nos arrojaría los siguientes resultados:
Como se puede observar, sólo en el nombre TURNER encontró una segunda ocurrencia de la cadena R en la posición 6. El nombre CLARK, sólo tiene una ocurrencia de R por lo que el resultad arroja 0, es decir, no encontrado.
Ahora, ¿y si ponemos un número negativo en el parámetro que indica a partir de que caracter queremos buscar? Así:
select ename as "Nombre", instr(ename, 'R', -1, 2) as "Posicion de R" from emp;
Le estamos indicando que la búsqueda la haga de derecha a izquierda (de revesa) comenzando por la primera posición. Esto nos daría el resultado siguiente:
Como podemos observar, ahora la consulta nos muestra el nombre TURNER y la posición de R en 3, que es la segunda ocurrencia de la R en TURNER pero de derecha a izquierda a partir de la posición 1 (contando de derecha a izquierda). Si le indicamos un -2 en la posición desde dónde queremos la búsqueda, buscará desde el penúltimo caracter hacia la izquierda, lo que nos dará un resultado de 0 en todas las filas, porque no hay ningún nombre que cumpla con la condición:
select ename as "Nombre", instr(ename, 'R', -2, 2) as "Posicion de R" from emp;
¿Alguna duda? Deja tu comentario.
¡Hasta la próxima!