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