Netapsys Blog

Aller au contenu | Aller au menu | Aller à la recherche

Intégrité référentielle et utilisation de fonctions SQL, ou comment rendre au SGBD une partie de ses responsabilités.

Faisons suite au dernier billet de Céline en restant dans le domaine des bases de données et des petites astuces connues de tous mais jamais utilisées. Intéressons nous à la gestion de l'intégrité référentielle et au calcul d'identifiants en laissant la base faire ce qu'elle sait faire et éviter un développement applicatif inutile.

Lire la suite...

Requêtes de recherche sous Oracle, Informix, Postgresql : gestion de la casse et des accents

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
  • ...