ホームページ > データベース > mysql チュートリアル > PostgreSQL はどのようにして単語と数字が混在した文字列を人間に優しい順序で並べ替えることができるのでしょうか?

PostgreSQL はどのようにして単語と数字が混在した文字列を人間に優しい順序で並べ替えることができるのでしょうか?

Mary-Kate Olsen
リリース: 2025-01-07 22:55:42
オリジナル
414 人が閲覧しました

How Can PostgreSQL Sort Mixed Word-and-Number Strings in a Human-Friendly Order?

PostgreSQL の英数字混在文字列の人間に優しい並べ替え

PostgreSQL で英数字が混在した文字列を人道的に並べ替えるのは、独特の課題です。理想的な並べ替え順序では、文字よりも数字が優先され、「20」の前に「3」が配置され、「10bob」の後に「fred」が配置されます。

文字列を数値コンポーネントと文字列コンポーネントに分割します

1 つの方法は、各文字列を英数字の境界でチャンクに分割することです。たとえば、「AAA2fred」は (「AAA」, 2, 「fred」) になります。この分離により、アルファベット ブロックの通常の照合規則を使用し、数値ブロックを整数として扱うことで、データ型に基づいて個別に並べ替えることができます。

regexp_matches() 関数と '(D*)(d*)' オプションを指定した 'g' モードを使用すると、各文字列のこれらのコンポーネントを抽出し、array_agg() を使用して ai 配列 (テキスト フィールドと整数フィールドの複合体) を作成できます。タイプ)。

分割データを並べ替えます

文字列を分割して複合型の配列に変換した後、これらの配列を並べ替えに使用できます。 ORDER BY 句はこの配列を利用して、文字ブロックが数字ブロック内で元の順序を維持するようにします。

完全な解決策

文字列の分割と並べ替えの手順を組み合わせると、次のクエリを使用して、望ましい人間のような並べ替えを実現できます:

<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 はどのようにして単語と数字が混在した文字列を人間に優しい順序で並べ替えることができるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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