Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine natürliche Sortierung gemischter alphabetischer und numerischer Zeichenfolgen in PostgreSQL durchführen?

Wie kann ich eine natürliche Sortierung gemischter alphabetischer und numerischer Zeichenfolgen in PostgreSQL durchführen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-08 00:52:40157Durchsuche

How Can I Perform Natural Sorting of Mixed Alphabetic and Numeric Strings in PostgreSQL?

Natürliche Sortierung gemischter alphanumerischer PostgreSQL-Zeichenfolgen

Eine inhärente Herausforderung beim natürlichen Sortieren gemischter alphanumerischer Zeichenfolgen besteht darin, die Reihenfolge der Wörter beizubehalten und gleichzeitig die Zahlen als Ganzzahlen zu behandeln. In PostgreSQL 9.1 und höher gibt es eine praktische Methode:

Zusammengesetzte Typen und Array-Operationen:

  1. Erstellen Sie einen zusammengesetzten Typ namens „ai“, der ein Textfeld „a“ und ein Ganzzahlfeld „i“ enthält.
  2. Teilen Sie jede Zeichenfolge mit der Funktion „regexp_matches“ in ein Array von „ai“-Werten auf.

Beispielabfrage (PostgreSQL 9.4 und höher):

<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>

So gehen Sie mit PostgreSQL 9.1 um:

In älteren Versionen von PostgreSQL muss die Abfrage leicht geändert werden:

<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>

Mit diesem Ansatz werden String-Splitting und natürliche Sortierung in PostgreSQL möglich und ermöglichen eine intuitive Sortierung verschiedener Datensätze, die gemischte alphanumerische Strings enthalten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine natürliche Sortierung gemischter alphabetischer und numerischer Zeichenfolgen in PostgreSQL durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn