PostgreSQL saya mengurutkan seperti yang Anda inginkan. Cara PostgreSQL membandingkan string ditentukan oleh lokal dan susunan. Saat Anda membuat database menggunakan createdb
ada -l
pilihan untuk mengatur lokal. Anda juga dapat memeriksa bagaimana konfigurasinya di lingkungan Anda menggunakan psql -l
:
[[email protected]]$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------+----------+----------+------------+------------+-----------------------
mn_test | postgres | UTF8 | pl_PL.UTF8 | pl_PL.UTF8 |
Seperti yang Anda lihat, basis data saya menggunakan susunan bahasa Polandia.
Jika Anda membuat database menggunakan susunan lain maka Anda dapat menggunakan susunan lain dalam kueri seperti:
SELECT * FROM sort_test ORDER BY name COLLATE "C";
SELECT * FROM sort_test ORDER BY name COLLATE "default";
SELECT * FROM sort_test ORDER BY name COLLATE "pl_PL";
Anda dapat membuat daftar koleksi yang tersedia dengan:
SELECT * FROM pg_collation;
DIEDIT:
Oh, saya lupa bahwa 'a11' harus sebelum 'a2'.
Saya tidak berpikir susunan standar dapat menyelesaikan penyortiran alfanumerik. Untuk penyortiran seperti itu, Anda harus membagi string menjadi beberapa bagian seperti pada respons Clodoaldo Neto. Opsi lain yang berguna jika Anda sering harus memesan dengan cara ini adalah memisahkan kolom nama menjadi dua kolom. Anda dapat membuat pemicu di INSERT dan UPDATE yang membagi name
ke dalam name_1
dan name_2
lalu:
SELECT name FROM sort_test ORDER BY name_1 COLLATE "en_EN", name_2;
(Saya mengubah susunan dari bahasa Polandia ke bahasa Inggris, Anda harus menggunakan susunan asli Anda untuk mengurutkan huruf seperti aącć dll)