AOWS

Just another adrian’s weblog

Ignorar tildes y mayúsculas en las consultas de Oracle

with 8 comments

Oracle, al contrario que MySQL, sí diferencia entre mayúsculas y minúsculas en las búsquedas. Esto, unido a la tradicional problemática con las tildes y demás símbolos extraños, hace que debamos tomar medidas en nuestras consultas para conseguir los resultados deseados.

Así, si nuestra búsqueda era:

[sql]
SELECT *
FROM tabla
WHERE campo LIKE ‘%texto%’;
[/sql]

si queremos que nos devuelva las coincidencias ignorando tildes y mayúsculas, la transformaríamos en:

[sql]
SELECT *
FROM tabla
WHERE UPPER(translate(campo, ‘áéíóúÁÉÍÓÚ’, ‘aeiouAEIOU’)) LIKE UPPER(translate(‘%texto’, ‘áéíóúÁÉÍÓÚ’, ‘aeiouAEIOU’));
[/sql]

La función UPPER convierte todos los caracteres a mayúsculas en ambos lugares (base de datos y texto a buscar), de forma que se ignoren las diferencias por estar en mayúsculas o minúsculas.

Con translate transformamos una serie de caracteres en otros, concretamente en el caso anterior estaríamos eliminando las tildes.

No es un método sencillo, quizá haya alguna forma de configurar Oracle para evitar realizar estas operaciones, pero funciona.

Written by adrian

25 enero, 2008 a 22:28

Publicado en Posts

Tagged with ,

8 comentarios

Subscribe to comments with RSS.

  1. Si inviertes los UPPER y los translate te ahorras las tildes en minúscula, de esta forma:

    …translate(UPPER(campo), ‘ÁÉÍÓÚ’, ‘AEIOU’) LIKE translate(UPPER(‘%texto’), ‘ÁÉÍÓÚ’, ‘AEIOU’);

    Moxan

    28 abril, 2008 at 08:32

  2. Muchas gracias por el dato, justo tuve la necesidad de realizar una busqueda donde no requeria diferenciar entre minuscula y mayuscula, jeje.

    Saludos.

    Rodrigo

    19 mayo, 2008 at 04:38

  3. Gracias por el aporte🙂

    alberto

    11 septiembre, 2008 at 18:42

  4. Gracias por la ayuda, funciona perfecto

    Davix

    13 noviembre, 2008 at 16:15

  5. Me ha sido de mucha ayuda, muchas gracias.

    leo

    31 mayo, 2011 at 15:25

  6. me es util, pero tengo un campo que tiene mas de 2000 puesto que es un clob, y me manda error de buffer, alguna recomendación?

    Luis Santana

    3 febrero, 2012 at 23:43

  7. thank you crack! =D

    crack

    31 mayo, 2013 at 14:55

  8. Aunque es viejo el post les traigo mi solución por si les sirve

    Primero modificar la forma de comparación y el ordenamiento

    alter session set nls_comp=linguistic;
    alter session set nls_sort=binary_ai;

    Luego, estas tres consultas son equivalentes

    select * from tabla where campo like ‘%TeXtoPrueba%’
    select * from tabla where campo like ‘%textoprueba%’
    select * from tabla where campo like ‘%téxtÓprúÉBa%’

    Lo del orden y la comparación debe realizarse una vez por cada sesión.
    Espero que les sirva!

    Andrés

    28 abril, 2015 at 13:18


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: