首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中執行不區分重音的查詢?

如何在 PostgreSQL 中執行不區分重音的查詢?

DDD
DDD原創
2025-01-20 12:17:39724瀏覽

How Can I Perform Accent-Insensitive Queries in PostgreSQL?

PostgreSQL 支援不區分重音符號的排序規則嗎?

Microsoft SQL Server 提供「不區分重音符號」的排序規則,允許執行類似 SELECT * FROM users WHERE name LIKE 'João' 的查詢,以檢索名稱為「Joao」的行。

PostgreSQL 的解決方案

PostgreSQL 提供 unaccent 模組,該模組可去除字串中的變音符號。要使用它,請安裝擴充功能並使用 unaccent() 函數:

<code class="language-sql">SELECT * FROM users WHERE unaccent(name) = unaccent('João');</code>

索引最佳化

為了加快查詢速度,請建立表達式索引:

<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));</code>

請記住為安全起見限定函數和字典的模式:

<code class="language-sql">CREATE OR REPLACE FUNCTION public.f_unaccent(text)
  RETURNS text
  LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT AS
$func$
SELECT public.immutable_unaccent('public.unaccent', )  -- 限定函数和字典的模式
$func$;

CREATE INDEX users_unaccent_name_idx ON users(public.f_unaccent(name));</code>

進階功能

連字

在 PostgreSQL 9.6 及更高版本中,unaccent() 會正確展開連字,將“Œ”轉換為“OE”,將“ß”轉換為“ss”。

模式匹配

unaccentpg_trgm 模組結合使用,可以使用 LIKEILIKE 進行任意模式匹配,並建立一個三元組 GIN 或 GIST 表達式索引。

為簡單起見,請考慮對左錨定模式使用三元組索引。

以上是如何在 PostgreSQL 中執行不區分重音的查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn