Recherche « Case insensitive », « Accent insensitive » multi-base

Pour faire une recherche « Case insensitive » et « Accent insensitive », plusieurs solutions :

  • Configurer la table de la base « CIAI » et chaque requete sera  « Case Insensitive » et « Accent Insensitive »
  • Transformer le mot recherché pour parametrer la requetes SQL permettant de comparer des choses comparables…

Sous ORACLE :

SELECT * from table WHERE TRANSLATE (UPPER(champ4), ‘ÉÈÊÀÁÂÄÇÌÍÎÏÑÓÒÔÖÚÙÛÜ’, ‘EEEAAAACIIIINOOOOUUUU’) LIKE TRANSLATE (UPPER(‘%réunion  commerciale%’), ‘ÉÈÊÀÁÂÄÇÌÍÎÏÑÓÒÔÖÚÙÛÜ’, ‘EEEAAAACIIIINOOOOUUUU’)
Cette syntaxe permet de comparer des chaines en majuscule dont les caractères accentués ont été remplacé par des caractères non accentués…).

Sous Oracle, il y a une autre solution (merci Cédric Courlet)

UPPER(CONVERT(VAR_SEARCHSTRING, ‘US7ASCII‘))

Sous SQL Server et Access :

SELECT * from table WHERE champ4 like ‘%r[eéèêë][uúùûü][nñ][iìíîï][oóòôö]n%
Dans ce cas, on voit que le SQL gère une forme de syntaxe d’expression régulière alors que sous ORACLE, on a du procéder à un remplacement.

Dans ces deux cas, on a accès à une recherche riche puisque « réunion commerciale » ressort les éléments suivants :

  • En majuscule sans accent : REUNION COMMERCIALE
  • En minuscule sans accents : reunion commerciale
  • En majuscule avec accent : RÉUNION COMMERCIALE
  • En minuscule sans accent : réunion commerciale

Tout quoi !

2 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *