


Bagaimanakah PostgreSQL Boleh Mengisih Rentetan Perkataan-dan-Nombor Campuran dalam Susunan Mesra Manusia?
Jan 07, 2025 pm 10:55 PMPostgreSQL 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;
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!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?
