PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Finden Sie mögliche Duplikate in zwei Spalten, ignorieren Sie Groß- und Kleinschreibung und Sonderzeichen

lower() / upper()

Verwenden Sie eine davon, um Zeichen entweder in Klein- oder Großbuchstaben umzuwandeln. Sonderzeichen sind nicht betroffen:

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

unaccent()

Wenn Sie diakritische Zeichen tatsächlich ignorieren möchten, wie Ihre Kommentare andeuten, installieren Sie das zusätzliche Modul unaccent , das ein Textsuchwörterbuch bereitstellt, das Akzente entfernt, sowie die Allzweckfunktion unaccent() :

CREATE EXTENSION unaccent;

Macht es sehr einfach:

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

Ergebnis:

busercafe

Dies entfernt keine Nicht-Buchstaben. Fügen Sie regexp_replace() hinzu wie @Craig dafür erwähnt:

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

Ergebnis:

softbusercafe

Sie können sogar einen funktionalen Index darauf aufbauen: