sql >> Database >  >> RDS >> PostgreSQL

Vind mogelijke duplicaten in twee kolommen en negeer hoofdletters en speciale tekens

lower() / upper()

Gebruik een van deze om tekens naar hoofdletters of kleine letters te vouwen. Speciale tekens worden niet beïnvloed:

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

unaccent()

Als je diakritische tekens wilt negeren, zoals je opmerkingen impliceren, installeer dan de extra module unaccent , dat een tekstzoekwoordenboek biedt dat accenten verwijdert en ook de algemene functie unaccent() :

CREATE EXTENSION unaccent;

Maakt het heel eenvoudig:

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

Resultaat:

busercafe

Dit verwijdert geen niet-letters. Voeg regexp_replace() toe zoals @Craig daarvoor vermeldde:

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

Resultaat:

softbusercafe

Je kunt er zelfs een functionele index bovenop bouwen:



  1. SQLite-voorbeelddatabase

  2. PHP Bereken Aantal downline in binaire boom

  3. Maak verbinding met Oracle zonder tnsname.ora

  4. Hoe twee update-query's met verschillende waar-voorwaarde te combineren?