
PostgreSQL の英数字混合文字列の自然な並べ替え
混合英数字文字列を自然にソートする際の固有の課題は、数値を整数として扱いながら単語の順序を維持することです。 PostgreSQL 9.1 以降には、実用的な方法が存在します。
複合型と配列操作:
サンプルクエリ (PostgreSQL 9.4 以降):
<code class="language-sql">SELECT data
FROM alnum
ORDER BY ARRAY(SELECT ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai
FROM regexp_matches(data, '(\D*)(\d*)', 'g') x)
, data;</code>PostgreSQL 9.1 の対処方法:
PostgreSQL の古いバージョンでは、クエリを少し変更する必要があります。
<code class="language-sql">SELECT data
FROM (
SELECT ctid, data, regexp_matches(data, '(\D*)(\d*)', 'g') AS x
FROM alnum
) x
GROUP BY ctid, data -- ctid作为缺少主键的占位符
ORDER BY regexp_replace (left(data, 1), '[0-9]', '0')
, array_agg(ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai)
, data;</code>このアプローチにより、PostgreSQL で文字列の分割と自然なソートが可能になり、英数字の文字列が混在するさまざまなデータセットを直感的にソートできるようになります。
以上がPostgreSQL でアルファベットと数字が混在した文字列の自然な並べ替えを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。