La función INSTR en Oracle te permite encontrar cadenas dentro de otras cadenas de una forma muy sencilla. Puedes establecer parámetros para indicador donde debe empezar o la ocurrencia que debe buscar.
Sintaxis
Escribe la siguiente sintaxis para utilizarlo:
INSTR(cadena , subcadena [, posicion_inicio [, ocurrencia]])
- INSTR: nombre de la función.
- cadena: campo o expresión donde debe buscar la subcadena.
- subcadena: campo o cadena que quieres buscar dentro de la cadena.
- posicion_inicio: indica donde debe comenzar a buscar (numero entero diferente de cero)
- ocurrencia: opcional, indica que ocurrencia debe mostrar. Por defecto siempre es 1.
Ejemplos
Buscar subcadena
En el siguiente ejemplo buscamos la subcadena ‘er’ en la expresión ‘Aprender, Conocer y Defender son verbos’. El resultado es un 7, que es la posición donde ha encontrado la primera ocurrencia:
SELECT INSTR( 'Aprender, Conocer y Defender son verbos', 'er' ) BUSQUEDA FROM dual;
Buscar subcadena en una ocurrencia concreta
En el siguiente ejemplo buscamos la subcadena ‘er’ en la expresión ‘Aprender, Conocer y Defender son verbos’, pero queremos encontrar cuando aparece por segunda vez. El resultado es 16 que es la posición donde ha encontrado la segunda ocurrencia:
-- MiguelTroyano.com SELECT INSTR( 'Aprender, Conocer y Defender son verbos', 'er', 1, 2 ) BUSQUEDA FROM dual;
Buscar subcadena en un campo
En el siguiente ejemplo buscamos la subcadena ‘yano’ en el campo nombre de la tabla empleados:
SELECT nombre, INSTR( nombre, 'yano' ) BUSQUEDA FROM empleados;
Ejemplo completo
-- Buscamos la primera ocurrencia de buscar la subcadena 'er' SELECT INSTR( 'Aprender, Conocer y Defender son verbos', 'er' ) BUSQUEDA FROM dual; -- Buscamos la segunda ocurrencia de buscar la subcadena 'er' SELECT INSTR( 'Aprender, Conocer y Defender son verbos', 'er', 1, 2 ) BUSQUEDA FROM dual; -- Borramos la tabla por si ya existe drop table empleados; -- Creamos la tabla create table empleados ( id_empleado numeric(2,0), id_departamento numeric(2,0), nombre character varying(50), puesto character varying(50), fecha_alta date, sueldo integer ); -- Insertamos valores insert into empleados values (1,1,'Miguel troyano','Analista',to_date('26/09/1986', 'dd/mm/yyyy'),60000); insert into empleados values (2,1,'Ismael troyano','Analista',to_date('01/01/2001', 'dd/mm/yyyy'),60000); insert into empleados values (3,1,'Jose troyano','Alta Dirección',to_date('01/01/2001', 'dd/mm/yyyy'),80000); insert into empleados values (4,1,'Pilar redondo','Alta Dirección',to_date('02/02/2002', 'dd/mm/yyyy'),80000); -- Comprobamos la salida de la sentencia con campos de una tabla SELECT nombre, INSTR( nombre, 'yano' ) BUSQUEDA FROM empleados;