Comparaison sans accents

Bonjour,
Dans une requête, je cherche un moyen de comparer deux champs sans tenir compte des accents ni de la casse (par exemple A, a, à, â, ä considérés comme identiques).
L’un d’entre vous pourrait-il me donner une idée pour effectuer cette opération.

Merci d’avance.

Bonjour

En m’inspirant de l’information Firebird 2.1.2 and UNICODE_CI j’ai testé la création de la table comme ceci :

CREATE TABLE PERSONS2 (

  PERS_ID INTEGER NOT NULL PRIMARY KEY,

  LAST_NAME VARCHAR(50) COLLATE UNICODE_CI_AI,
  FIRST_NAME VARCHAR(50) COLLATE UNICODE_CI_AI

);

Nota: CI pour Case Insensitive et AI pour Accent Insensitive.

Dès lors la requête suivante permet de trouver Gérard, Gerard, GERARD, etc.

SELECT * FROM "PERSONS2" WHERE "LAST_NAME" = 'geRARD' COLLATE "UNICODE_CI_AI"

Cordialement

Bonsoir et merci,
Je viens de tester avec le moteur FireBird. Ce que je veux faire fonctionne bien. Par contre, cela ne marche pas avec HSQLDB (COLLATE n’est pas reconnu).

Bonjour

Non en effet, c’était implicite dans ma réponse (avec le lien vers la documentation Firebird) mais j’aurais dû le préciser, désolé. Hors programmation (par exemple création d’une colonne de recherche dans laquelle on met par exemple tout en minuscule sans accent et en recherchant sur cette colonne) je ne vois pas solution pour hsqldb…

Cordialement

Bonjour,
Sauf si quelqu’un a une solution marchant sur HSQLDB, il ne me reste plus qu’à trouver comment activer FireBird sur ma distribution Ubuntu puis comment basculer ma base d’exploitation entre les deux environnements mais ceci est une autre paire de questions.
Cordialement.

Bonjour,

Tout marche bien tant que l’on veut comparer avec une valeur. Par contre, je ne trouve pas comment rédiger la requête SQL pour comparer les champs de deux tables.

Cordialement

Bonsoir,

Voici la solution trouvée (peut-être pas la plus simple mais elle semble fonctionnelle) :

Avec “coller” créer la structure (sans les données) de table désirée (avec le nom voulu par les requêtes existantes), relever les caractéristiques des champs concernés et les supprimer

Avec SQL, recréer ces champs en ajoutant le paramètre COLLATE

Coller les données de la table.

Maintenant, les jonctions ne tiennent plus compte des accents ni de la casse.

[EDIT]
En cherchant, j’ai trouvé une autre solution : modifier le paramètre directement dans la totalité de la base.
En mode SQL, exécuter :

  ALTER CHARACTER SET UTF8
     SET DEFAULT COLLATION UNICODE_CI_AI

Après cela, tout nouveau champ sera comparé avec ce critère dans les requêtes. Les recherches par filtre ne nécessitent pas de modifier les tables, les majuscules et accents sont directement ignorés.

[/EDIT]

Je ne comprends pas ce post… Enfin, ce que je comprends : tu veux comparer/relier un champ d’une table défini avec collate avec un champ défini sans ce paramètre et que le lien/comparaison fonctionne sans tenir compte des accents/casse.

Si c’est bien cela il n’y a rien à faire, cf. l’exemple suivant où la table “notcoll” a été créée sans le paramètre collate :

SELECT DISTINCT "PERSONS2"."LAST_NAME", "NOTCOLL"."LAST_NAME"  FROM "NOTCOLL", "PERSONS2" WHERE "NOTCOLL"."LAST_NAME" = "PERSONS2"."LAST_NAME"

Les appariement se sont sans tenir compte des accents ni de la casse.

Cordialement

Bonjour Pierre-Yves,

C’est bien ma demande de pouvoir comparer entre 2 tables sans tenir compte des accents ni de la casse. Mon problème étant que COLLATE n’a pas sa place dans l’interface “normale” de création de tables. Comme mes données proviennent quasi systématiquement de tableaux Excel, ou de tables migrées de HSQLDB, je suis obligé de passer systématiquement par des ordres SQL directs, ce qui ne m’arrange pas, d’autant plus que Firebird est très restrictif sur les modifications de structures.

J’espère que, dans une prochaine version, ces restrictions vont s’atténuer.

Cordialement,