Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Melakukan Pengisihan Semula Jadi Rentetan Abjad dan Numerik Campuran dalam PostgreSQL?

Bagaimanakah Saya Boleh Melakukan Pengisihan Semula Jadi Rentetan Abjad dan Numerik Campuran dalam PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-08 00:52:40
asal
144 orang telah melayarinya

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

Isihan semula jadi rentetan alfanumerik campuran PostgreSQL

Cabaran yang wujud dalam menyusun rentetan abjad angka bercampur secara semula jadi ialah mengekalkan susunan perkataan sambil tetap menganggap nombor sebagai integer. Dalam PostgreSQL 9.1 dan ke atas, kaedah praktikal wujud:

Jenis komposit dan operasi tatasusunan:

  1. Buat jenis komposit dipanggil "ai" yang mengandungi medan teks "a" dan medan integer "i".
  2. Pisah setiap rentetan kepada tatasusunan nilai "ai" menggunakan fungsi "regexp_matches".

Sampel pertanyaan (PostgreSQL 9.4 dan lebih baru):

<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>
Salin selepas log masuk

Cara berurusan dengan PostgreSQL 9.1:

Dalam versi lama PostgreSQL, pertanyaan perlu diubah suai sedikit:

<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>
Salin selepas log masuk

Dengan pendekatan ini, pemisahan rentetan dan pengisihan semula jadi boleh dilaksanakan dalam PostgreSQL, membenarkan pengisihan intuitif pelbagai set data yang mengandungi rentetan alfanumerik campuran.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Pengisihan Semula Jadi Rentetan Abjad dan Numerik Campuran dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan