sql >> Databasteknik >  >> RDS >> PostgreSQL

Hitta möjliga dubbletter i två kolumner och ignorera skiftläge och specialtecken

lower() / upper()

Använd en av dessa för att vika tecken till antingen gemener eller versaler. Specialtecken påverkas inte:

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

unaccent()

Om du verkligen vill ignorera diakritiska tecken, som dina kommentarer antyder, installera tilläggsmodulen code>oaccent , som tillhandahåller en textsökningsordlista som tar bort accenter och även den allmänna funktionen unaccent() :

CREATE EXTENSION unaccent;

Gör det väldigt enkelt:

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

Resultat:

busercafe

Detta tar inte bort icke-bokstäver. Lägg till regexp_replace() som @Craig nämnde för det:

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

Resultat:

softbusercafe

Du kan till och med bygga ett funktionellt index ovanpå det:



  1. Frågekostnad:Globala tillfälliga tabeller kontra samlingar (virtuella matriser)

  2. När du designar databaser, vilket är det bästa sättet att lagra flera sanna/falska värden?

  3. Skapa ett säkert inloggningsskript i PHP och MySQL utan HTTPS

  4. Åtkomst nekad att skapa initial databas – hur ger jag rätt åtkomst?