sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-accent + hoofdletterongevoelig zoeken

Als u moet "combineren met niet-hoofdlettergevoelig", zijn er een aantal opties, afhankelijk van uw exacte vereisten.

Misschien het eenvoudigst, maak de expressie index hoofdletterongevoelig.

Voortbouwend op de functie f_unaccent() uiteengezet in het antwoord waarnaar wordt verwezen:

  • Ondersteunt PostgreSQL "accentongevoelige" sorteringen?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));

Dan:

SELECT *
FROM   users
WHERE  lower(f_unaccent(name)) = lower(f_unaccent('João'));

Of je zou de lower() . kunnen bouwen in de functie f_unaccent() , om iets als f_lower_unaccent() . af te leiden .

Of (vooral als je toch vage patronen moet matchen) kun je een trigram-index gebruiken die wordt geleverd door de extra module pg_trgm voortbouwend op bovenstaande functie, die ook ILIKE . ondersteunt . Details:

  • LAGER LIKE vs iLIKE

Ik heb een notitie toegevoegd aan het antwoord waarnaar wordt verwezen.

Of je zou de extra module citext kunnen gebruiken :

  • Uitstelbare, hoofdletterongevoelige unieke beperking


  1. SQL Server:Isolatieniveau lekken over gepoolde verbindingen

  2. Fix Error:"SELECT's links en rechts van UNION hebben niet hetzelfde aantal resultaatkolommen" in SQLite

  3. Emoji-tekens opslaan in MySQL-database

  4. Hoe van database wisselen in Postgres?