PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Намерете възможни дубликати в две колони, като игнорирате малки и големи букви и специални знаци

lower() / upper()

Използвайте един от тях, за да сгънете знаците в малки или главни букви. Специалните символи не са засегнати:

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

unaccent()

Ако наистина искате да игнорирате диакритичните знаци, както подсказват вашите коментари, инсталирайте допълнителния модул без ударение , който предоставя речник за търсене на текст, който премахва ударенията, както и функцията с общо предназначение unaccent() :

CREATE EXTENSION unaccent;

Прави го много просто:

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

Резултат:

busercafe

Това не премахва небукви. Добавете regexp_replace() като @Craig спомена за това:

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

Резултат:

softbusercafe

Можете дори да създадете функционален индекс върху това:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LAG() / LEAD() на следващия ранг (Postgresql)

  2. В psql защо някои команди нямат ефект?

  3. Как да напиша функция, която връща текстови или целочислени стойности?

  4. knex:какъв е подходящият начин за създаване на масив от резултати?

  5. По време на локално разработване с Kubernetes/minikube, как трябва да се свържа с базата данни на postgres, работеща на localhost?