PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Trouver les doublons possibles dans deux colonnes en ignorant la casse et les caractères spéciaux

lower() / upper()

Utilisez l'un d'entre eux pour plier les caractères en minuscules ou en majuscules. Les caractères spéciaux ne sont pas affectés :

SELECT count(*), lower(name), number
FROM   tbl
GROUP  BY lower(name), number
HAVING count(*) > 1;

unaccent()

Si vous souhaitez réellement ignorer les signes diacritiques, comme vos commentaires l'impliquent, installez le module supplémentaire unaccent , qui fournit un dictionnaire de recherche de texte qui supprime les accents ainsi que la fonction générale unaccent() :

CREATE EXTENSION unaccent;

C'est très simple :

SELECT lower(unaccent('Büßercafé'));

Résultat :

busercafe

Cela ne supprime pas les non-lettres. Ajouter regexp_replace() comme @Craig l'a mentionné pour ça :

SELECT lower(unaccent(regexp_replace('$s^o&f!t Büßercafé', '\W', '', 'g') ));

Résultat :

softbusercafe

Vous pouvez même créer un index fonctionnel en plus :