jueves, 17 de diciembre de 2015

Búsquedas en SQL sin mayúsculas o acentos

Es muy normal que se pida realizar búsquedas contra la BBDD que no tengan en cuenta mayúsculas/minúsculas y por supuesto los acentos. Para ello podemos hacer uso de funciones SQL que nos permitan de forma sencilla realizar esto mismo. Si va a ser una operación común en todas las búsquedas, puede ser util crear una función SQL para evitar duplicidad y mejorar el mantenimiento.
CREATE OR REPLACE FUNCTION QUITAR_ACENTOS (entrada    VARCHAR2) 
RETURN VARCHAR2 IS salida    VARCHAR2(4000);
BEGIN
    salida := translate(upper(entrada),'ÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜÑÇ', 'AAAAEEEEIIIIOOOOUUUUNC');
    RETURN(salida);
END QUITAR_ACENTOS;

Ejemplo de uso:
SELECT * FROM TABLA T WHERE QUITAR_ACENTOS(T.CAMPO) LIKE '%'||QUITAR_ACENTOS(cadena_busqueda)||'%'

Versión 2.0

En esta versión utilizamos también la función regexp_replace. Lo cual nos permite indicar una expresión regular, en este caso para indicarle que sustituya los caracteres extraños por el caracter vacío y omitirlos en la búsqueda.
...
    salida := regexp_replace(translate(upper(entrada),'ÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜÑÇ', 'AAAAEEEEIIIIOOOOUUUUNC'), '[^A-Za-z0-9]', '');
...

No hay comentarios:

Publicar un comentario