Archives mensuelles : décembre 2006

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 !

Concaténation : Compatibilité inter-base

Le caractère permettant de concaténer deux champs dans une requête sont différents sous Access, Sql Server et Oracle !

  • Pour MS Access ce sera « & »
  • Pour MS Sql Server « + »
  • Pour Oracle « || »

Exemple :

SELECT champ1 & champ2 FROM table WHERE clause
SELECT champ1 + champ2 FROM table WHERE clause
SELECT champ1 || champ2 FROM table WHERE clause

Allez comprendre !

Insertion d’un & (et commercial) dans une requête SQL pour Oracle

On a eu quelques problèmes pour inserer des « et commerciaux » (« et commercial » ou &) dans des requêtes de scripts SQL pour ORACLE puisque & est un caractere protegé.

  • Première solution, utiliser le caractère d’échappement de la plupart des base de données : l’anti slash (\), ça fonctionne dans Toad, maispas dans le SqlPlus
  • Deuxième solution : Chr(38) qui permet d’inserer un & dans n’importe quelle requête

Exemple :

INSERT INTO table (champ) VALUE (‘page.php?what=pro_hor’||Chr(38)||’barre=non’)