Poser votre question
0

Comparaison sans accents

posée 2019-11-25 15:37:14 +0200

Image Gravatar de Jacques-64

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.

éditer requalifier signaler fermer fusionner supprimer

2Réponses

0

répondue 2019-11-25 17:44:04 +0200

Image Gravatar de pierre-yves samyn

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

éditer signaler supprimer permalien plus

Commentaires

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

Image Gravatar de Jacques-64Jacques-64 ( 2019-11-25 21:35:06 +0200 )éditer

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

Image Gravatar de pierre-yves samynpierre-yves samyn ( 2019-11-26 08:17:46 +0200 )éditer

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.

Image Gravatar de Jacques-64Jacques-64 ( 2019-11-26 14:38:10 +0200 )éditer

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

Image Gravatar de Jacques-64Jacques-64 ( 2019-12-13 15:50:34 +0200 )éditer
0

répondue 2019-12-13 17:46:13 +0200

Image Gravatar de Jacques-64

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.

éditer signaler supprimer permalien plus

Commentaires

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

Image Gravatar de pierre-yves samynpierre-yves samyn ( 2019-12-13 18:52:35 +0200 )éditer

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,

Image Gravatar de Jacques-64Jacques-64 ( 2019-12-15 10:28:10 +0200 )éditer
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2019-11-25 15:37:14 +0200

Consultée: 54 fois

Mise à jour: Dec 13 '19