divendres, 14 de juny del 2013

Condicions a Oracle ignorant accents i majúscules

Moltes vegades succeeix que, en anar a escriure les condicions d'una consulta, aquestes es fan sobre camps de text que poden contenir accents, majúscules, minúscules, etc. i no es vol que aquests elements distorsionin els resultats.

Una opció (en ORACLE) és usar la funció translate.

Aquesta funció rep tres paràmetres:

  1. La cadena a tractar.
  2. Un conjunt de caractèrs a substituir.
  3. Els caràcters pels que substituir.
El que fa és, sobre la cadena a tractar, per cada ocurrència de (2), busca el caràcter que està a la mateixa posició de (3) i el canvia.



Exemple:


    SELECT nom
      FROM usuaris o
     WHERE TRANSLATE(UPPER(o.nom),'ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛ','AEIOUAEIOUAEIOU')
      LIKE TRANSLATE(UPPER('%lluis%'),'ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛ','AEIOUAEIOUAEIOU') ;

Aquesta consulta retorna les files que tenen el camp o.nom amb valors: lluis,lluís, Lluís, Lluïs, etc.