gmocamilotd
12/6/2017 - 4:23 PM

Realizar búsquedas ignorando las tildes con postgresql

(tildes mayusculas minusculas) En muchas ocasiones, necesitamos realizar búsquedas por palabras pero sin tener en cuenta las tildes.

Hay dos maneras, la primera usando una extension y la otra con una consulta especial, como se detalla a continuación

Y en este caso usando PostgreSQL 9.1, tenemos la extensión unaccent que nos permite dejar sin tildes una palabra o un conjunto de palabras.

Otra de las ventajas de utilizar PostgreSQL, es por que nos permite crear indices a expresiones o funciones.

Como primer paso creamos el indice en el campo que vamos a usar para las búsquedas e instalamos la extensión:

CREATE EXTENSION unaccent;  
ALTER FUNCTION unaccent(text) IMMUTABLE;  
CREATE INDEX person_name_idx0 ON person USING btree (unaccent(name));  

Una vez tenemos la base de datos preparada para realizar consultas, aqui un ejemplo de como realizar una busqueda ignorando las tildes: (usando django)

>>> Person.objects.extra(where=["unaccent(name) = %s"], params=["Andrei"])
[<Person: 1>]

Usando la consulta:

SELECT TO_ASCII(CAT_CLIENTES.NOMBRE, ‘LATIN1’) LIKE ‘%"+variable+"%’ ORDER BY CAT_CLIENTES.NOMBRE ASC

Con la sencilla función TO_ASCII aplicada sobre el campo NOMBRE, tendrá el efecto de que los resultados traídos por la consulta no tomaran en cuenta si el registro tiene o no tilde. Por lo que si ahora buscamos “Juan Apostol” nos traerá de resultado “Juan Apóstol” aunque no lo hallamos escrito con su acento correspondiente.