Pour qu’un outil de recherche soit performant et agréable à utiliser, il faut qu’il soit capable de retourner tous les éléments susceptibles de correspondre à ce que l’utilisateur recherche sans tenir compte de la casse et/ou des accents.
Sous Oracle, il est possible d’utiliser l'opérateur « TRANSLATE » pour gérer ce genre de problème.
SELECT * FROM TABLE WHERE TRANSLATE(UPPER(monChamp),’ ÉÈÊËÀÄÂÎÏÔÖÛÜ’,’ EEEEAAAIIOOUU’)) LIKE TRANSLATE(UPPER(‘%requêtes%’), ‘ÉÈÊËÀÄÂÎÏÔÖÛÜ’, ‘EEEEAAAIIOOUU’);
Sous Informix, il est possible de passer par le « MATCHES » et les regexp.
SELECT * FROM TABLE WHERE UPPER(monChamp) MATCHES ‘*R\[EÉÈÊËéèêë\]Q\[UÛÜûü\]\[EÉÈÊËéèêë\]T\[EÉÈÊËéèêë\]S*’;
Après un «MATCHES», il est possible d’utiliser les symboles suivants :
- * : représente une chaîne de 0 ou plusieurs caractères
- ? : représente un seul caractère
- […] : contient un ensemble de caractères
Sous Postgresql, la solution passe par l'utilisation du « SIMILAR TO » et des regexp.
SELECT * FROM TABLE WHERE UPPER(monChamp) SIMILAR TO ‘%R\[EÉÈÊËéèêë\]Q\[UÛÜûü\]\[EÉÈÊËéèêë\]T\[EÉÈÊËéèêë\]S%’;
En résultat de requête, nous aurons bien toutes les lignes contenant ‘requete’ sans tenir compte de la casse et/ou des accents :
- requete
- requête
- REQUETE
- REQUÊTE
- ...