ホームページ > データベース > mysql チュートリアル > PostgreSQL でアクセントを区別しないクエリを実行するにはどうすればよいですか?

PostgreSQL でアクセントを区別しないクエリを実行するにはどうすればよいですか?

DDD
リリース: 2025-01-20 12:17:39
オリジナル
726 人が閲覧しました

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」に変換します。

パターンマッチング

unaccent モジュールと組み合わせて pg_trgm を使用すると、LIKE または ILIKE を使用して任意のパターン マッチングを実行し、トリプレット GIN または GIST 式インデックスを作成できます。

簡単にするために、左アンカー パターンにトリプレット インデックスを使用することを検討してください。

以上がPostgreSQL でアクセントを区別しないクエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート