sql >> Base de Datos >  >> RDS >> PostgreSQL

Encuentre posibles duplicados en dos columnas ignorando mayúsculas y minúsculas y caracteres especiales

lower() / upper()

Use uno de estos para doblar caracteres a mayúsculas o minúsculas. Los caracteres especiales no se ven afectados:

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

unaccent()

Si realmente desea ignorar los signos diacríticos, como implican sus comentarios, instale el módulo adicional unaccent , que proporciona un diccionario de búsqueda de texto que elimina los acentos y también la función de propósito general unaccent() :

CREATE EXTENSION unaccent;

Lo hace muy simple:

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

Resultado:

busercafe

Esto no elimina las no letras. Agregue regexp_replace() como @Craig mencionó para eso:

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

Resultado:

softbusercafe

Incluso puede crear un índice funcional además de eso: