Pues hoy les entrego una simple función en oracle (que seguramente es extrapolable a otro lenguaje) que hace algo sencillo: encuentra cuantas veces en una cadena aparace un caracter o substring que desees verificar.
Por ejemplo, te sirve para saber cuantas veces está la letra 'a' en la palabra 'amapolas' ó cuantas veces existe 'si' en '111si92992sisiwewesi'.
El concepto es así:
- Calculamos la longitud de la cadena en la que queremos encontrar el número de ocurrencias.
- Le restamos la longitud de esa misma cadena pero despues de hacer un REPLACE de el caracter o substring al que deseamos encontrar el número de ocurrencias.
- Lo dividimos entre la longitud del caracter o substring al que deseamos encontrar el número de ocurrencias.
Y Listo!!! aqui les paso el código :) espero les sea útil.
CREATE OR REPLACE FUNCTION OCURRENCIES(CADENA IN VARCHAR2/*LA CADENA BASE*/,SUBCADENA IN VARCHAR2 /*LA CADENA QUE QUEREMOS ENCONTRAR LA OCURRENCIA*/) RETURN NUMBER IS RESPUESTA NUMBER; BEGIN SELECT (LENGTH(CADENA)-LENGTH(REPLACE(CADENA,SUBCADENA,'')))/LENGTH(SUBCADENA) INTO RESPUESTA FROM DUAL; RETURN RESPUESTA; EXCEPTION WHEN OTHERS THEN RETURN 0; END OCURRENCIES;
Ejemplo:
SELECT OCURRENCIES('AMAPOLA','A') FROM DUAL;
Este ejemplo retornará 3.
Muy buena rutina!
ResponderEliminarpero para evitar el error cuando la cadena es igual a subcadena incluimos NVL:
SELECT (LENGTH(CADENA)-NVL(LENGTH(REPLACE(CADENA,SUBCADENA,'')),0))/LENGTH(SUBCADENA)
Tienes razón con eso! Muchas Gracias, pero nunca está demás el manejo de excepciones.
EliminarEsperamos aportar más en el futuro.
Muchas gracias. He reaprovechado tu codigo.
ResponderEliminarMe ha venido estupendo
Consulta!! u cuando la cadena es un blob? no te deja utilizar.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarGracias
ResponderEliminar