PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Akzent + Suche ohne Berücksichtigung der Groß-/Kleinschreibung

Wenn Sie "mit Groß- und Kleinschreibung kombinieren" müssen, gibt es eine Reihe von Optionen, abhängig von Ihren genauen Anforderungen.

Am einfachsten ist es vielleicht, die Groß-/Kleinschreibung des Ausdrucksindex zu ignorieren.

Aufbauend auf der Funktion f_unaccent() in der referenzierten Antwort dargelegt:

  • Unterstützt PostgreSQL "akzentunabhängige" Sortierungen?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));

Dann:

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

Oder Sie könnten lower() erstellen in die Funktion f_unaccent() , um so etwas wie f_lower_unaccent() abzuleiten .

Oder (insbesondere wenn Sie ohnehin einen Fuzzy-Pattern-Matching durchführen müssen) können Sie einen Trigram-Index verwenden, der vom zusätzlichen Modul pg_trgm bereitgestellt wird Aufbauend auf obiger Funktion, die auch ILIKE unterstützt . Einzelheiten:

  • LOWER LIKE vs. iLIKE

Ich habe der referenzierten Antwort eine Notiz hinzugefügt.

Oder Sie könnten das zusätzliche Modul citext verwenden :

  • Aufschiebbare, eindeutige Einschränkung ohne Berücksichtigung der Groß-/Kleinschreibung