Función INSTR en Oracle

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;

Escribir un comentario