#1 Thu 16 March 2023 15:43
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
jointure champ avec et sans accent
Bonjour,
Je souhaite réaliser une jointure sur le champ d'une table qui présente des intitulés sans accents, par exemple 'Non Renseigne' en lien avec le champ d'une autre table qui présente les mêmes différents intitulés (chacun étant cette fois-ci associé à une clé primaire car cette table est de type "dictionnaire"), mais avec accents, soit pour l'exemple donné 'Non Renseigné'.
Voici la forme de ma jointure initiale :
SELECT *
FROM mon_schema.table_jointure
INNER JOIN mon_schema.table_dic_jointe
ON table_jointure.champ_sans_accent = table_jointe.champ_avec_accent
J'ai tenté de résoudre le problème que je rencontre actuellement de différentes manières, mais je n'ai pour l'instant pas réussi à en trouver une qui me convienne. J'ai notamment écrit un script de la forme suivante :
SELECT *
FROM mon_schema.table_jointure
INNER JOIN mon_schema.table_dic_jointe
ON REPLACE(table_jointure.champ_sans_accent,'e','é') = table_jointe.champ_avec_accent
Cependant, le script juste ci-dessus ne me permet pas d'obtenir le résultat souhaité car il me renvoie uniquement les lignes qui présentent les problèmes d'accent (par exemple Non Renseigné et Départementale) mais pas celles associées à des libellés sans accents (par exemple celles avec l'intitulé Parking n'apparaissent pas dans la sélection).
Pourriez-vous m'indiquer comment procéder s'il-vous-plaît ?
N'hésitez pas à m'indiquer si vous avez besoin de plus de renseignements.
Hors ligne
#2 Thu 16 March 2023 16:04
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: jointure champ avec et sans accent
Il y a des propositions de fonctions ici, par exemple :
Code:
CREATE OR REPLACE FUNCTION unaccent_string(text) RETURNS text IMMUTABLE STRICT LANGUAGE SQL AS $$ SELECT translate( $1, 'âãäåāăąÁÂÃÄÅĀĂĄèééêëēĕėęěĒĔĖĘĚìíîïìĩīĭÌÍÎÏÌĨĪĬóôõöōŏőÒÓÔÕÖŌŎŐùúûüũūŭůÙÚÛÜŨŪŬŮ', 'aaaaaaaaaaaaaaaeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiooooooooooooooouuuuuuuuuuuuuuuu' ); $$;
Du coup, ça donnerait une jointure comme ça :
Code:
FROM t1 JOIN t2 ON unaccent_string(t1.champ1) = unaccent_string(t2.champ2)
Dernière modification par Sylvain M. (Thu 16 March 2023 16:05)
Sylvain M.
Hors ligne
#3 Thu 16 March 2023 20:07
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: jointure champ avec et sans accent
Bonsoir
unaccent est une extension de postgresql aussi: https://www.postgresql.org/docs/current/unaccent.html
Nicolas
Hors ligne
#4 Fri 17 March 2023 11:11
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: jointure champ avec et sans accent
Bonjour,
Je vous remercie pour votre aide, j'ai utilisé la fonction proposée par Sylvain M. qui fonctionne très bien.
Hors ligne