Rumah >pangkalan data >tutorial mysql >Bagaimanakah PostgreSQL Boleh Mengisih Rentetan Perkataan-dan-Nombor Campuran dalam Susunan Mesra Manusia?
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:
<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>
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!