PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Trova possibili duplicati in due colonne ignorando maiuscole e minuscole e caratteri speciali

lower() / upper()

Usa uno di questi per piegare i caratteri in minuscolo o maiuscolo. I caratteri speciali non sono interessati:

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

unaccent()

Se in realtà vuoi ignorare i segni diacritici, come suggeriscono i tuoi commenti, installa il modulo aggiuntivo unaccent , che fornisce un dizionario di ricerca di testo che rimuove gli accenti e anche la funzione generica unaccent() :

CREATE EXTENSION unaccent;

Lo rende molto semplice:

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

Risultato:

busercafe

Questo non rimuove le non lettere. Aggiungi regexp_replace() come @Craig menzionato per questo:

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

Risultato:

softbusercafe

Puoi anche creare un indice funzionale su questo: