PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Znajdź możliwe duplikaty w dwóch kolumnach, ignorując wielkość liter i znaki specjalne

lower() / upper()

Użyj jednego z nich, aby złożyć znaki na małe lub duże litery. Nie ma to wpływu na znaki specjalne:

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

unaccent()

Jeśli rzeczywiście chcesz ignorować znaki diakrytyczne, jak sugerują Twoje komentarze, zainstaluj dodatkowy moduł nieakcent , który zapewnia słownik wyszukiwania tekstu, który usuwa akcenty, a także funkcję ogólnego przeznaczenia unaccent() :

CREATE EXTENSION unaccent;

To bardzo proste:

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

Wynik:

busercafe

To nie pozbawia liter. Dodaj regexp_replace() jak wspomniał @Craig:

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

Wynik:

softbusercafe

Możesz nawet zbudować funkcjonalny indeks:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sqlalchemy:dodatkowa aktualizacja relacji

  2. Jaki jest odpowiedni typ danych do przechowywania strefy czasowej?

  3. Uporządkuj, nie pracując na kolumnach obliczeniowych, jeśli kolejność według jest stosowana w wielu kolumnach

  4. Używanie .pgpass z Apache libphp5.so

  5. PostgreSQL - dynamiczna wartość jako nazwa tabeli