Rumah > pangkalan data > tutorial mysql > Bagaimanakah PostgreSQL Boleh Mengisih Rentetan Perkataan-dan-Nombor Campuran dalam Susunan Mesra Manusia?

Bagaimanakah PostgreSQL Boleh Mengisih Rentetan Perkataan-dan-Nombor Campuran dalam Susunan Mesra Manusia?

Mary-Kate Olsen
Lepaskan: 2025-01-07 22:55:42
asal
526 orang telah melayarinya

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

PostgreSQL pengisihan rentetan alfanumerik campuran yang mesra manusia

Pengisihan rentetan abjad angka campuran secara manusiawi dalam PostgreSQL ialah satu cabaran yang unik. Susunan isihan yang ideal akan mengutamakan nombor berbanding huruf, meletakkan "3" sebelum "20" dan "fred" selepas "10bob".

Pisah rentetan kepada nombor dan komponen rentetan

Salah satu cara ialah membelah setiap rentetan kepada ketulan pada sempadan alfanumerik. Contohnya, "AAA2fred" akan menjadi ("AAA", 2, "fred"). Pemisahan ini membenarkan pengisihan berasingan berdasarkan jenis data, menggunakan peraturan pengumpulan biasa untuk blok abjad dan menganggap blok berangka sebagai integer.

Menggunakan fungsi regexp_matches() dan mod '(D*)(d*)' dengan pilihan 'g', kita boleh mengekstrak komponen ini bagi setiap rentetan dan menggunakan array_agg() untuk mencipta tatasusunan ai (komposit medan teks dan integer jenis).

Isih data pecahan

Selepas membelah dan menukar rentetan kepada tatasusunan jenis komposit, kami boleh menggunakan tatasusunan ini untuk mengisih. Klausa ORDER BY menggunakan tatasusunan ini untuk memastikan bahawa blok huruf mengekalkan susunan asalnya dalam blok nombor.

Penyelesaian Lengkap

Menggabungkan langkah pemisahan dan pengisihan rentetan, kita boleh mencapai pengisihan seperti manusia yang diingini menggunakan pertanyaan berikut:

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

Penyelesaian ini berfungsi dengan baik untuk data arbitrari dengan bilangan elemen yang berbeza-beza dalam setiap rentetan, dan ia menyediakan pendekatan fleksibel yang boleh disesuaikan dengan keperluan pengisihan khusus anda.

Atas ialah kandungan terperinci Bagaimanakah PostgreSQL Boleh Mengisih Rentetan Perkataan-dan-Nombor Campuran dalam Susunan Mesra Manusia?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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