"Normalkan" untuk menyortir
Anda bisa gunakan regexp_replace()
dengan pola '[^a-zA-Z]'
di ORDER BY
klausa tetapi itu hanya mengenali huruf ASCII murni. Lebih baik gunakan singkatan kelas '\W'
yang mengenali huruf non-ASCII tambahan di lokal Anda seperti äüóèß
dll.Atau Anda bisa berimprovisasi dan "normalkan semua karakter dengan elemen diakritik ke bentuk dasarnya dengan bantuan unaccent()
fungsi. Pertimbangkan demo kecil ini:
SELECT *
, regexp_replace(x, '[^a-zA-Z]', '', 'g')
, regexp_replace(x, '\W', '', 'g')
, regexp_replace(unaccent(x), '\W', '', 'g')
FROM (
SELECT 'XY ÖÜÄöüäĆČćč€ĞğīїıŁłŃńŇňŐőōŘřŠšŞşůŽžż‘´’„“”–—[](),;.:̈� XY'::text AS x) t
->SQLfiddle untuk Postgres 9.2.
->SQLfiddle untuk Postgres 9.1.
Kode ekspresi reguler telah diperbarui di versi 9.2. Saya berasumsi inilah alasan peningkatan penanganan di 9.2 di mana semua karakter huruf dalam contoh cocok, sedangkan 9.1 hanya cocok dengan beberapa.
unaccent()
disediakan oleh modul tambahan unaccent
. Jalankan:
CREATE EXTENSION unaccent;
sekali per database untuk digunakan (Postgres 9.1+, versi yang lebih lama menggunakan teknik berbeda ).
lokal / susunan
Anda harus menyadari bahwa Postgres bergantung pada sistem operasi yang mendasari untuk lokal (termasuk pemeriksaan). Urutan pengurutan diatur oleh lokal yang Anda pilih, atau lebih spesifik LC_COLLATE
. Lebih lanjut dalam jawaban terkait ini:
Urutan pengurutan string (LC_COLLATE dan LC_CTYPE)
Ada rencana untuk memasukkan dukungan pemeriksaan ke Postgres secara langsung , tapi itu tidak tersedia saat ini.
Banyak lokal mengabaikan karakter khusus yang Anda jelaskan untuk menyortir data karakter di luar kotak. Jika Anda memiliki lokal yang terinstal di sistem Anda yang menyediakan urutan pengurutan yang Anda cari, Anda dapat menggunakannya secara ad-hoc di Postgres 9.1 atau yang lebih baru:
SELECT foo FROM bar ORDER BY foo COLLATE "xy_XY"
Untuk melihat susunan mana yang diinstal dan tersedia di instalasi Postgres Anda saat ini:
SELECT * FROM pg_collation;
Sayangnya tidak mungkin untuk menentukan susunan kustom Anda sendiri (belum) kecuali Anda meretas kode sumbernya.
Aturan susunan biasanya diatur oleh aturan bahasa seperti yang diucapkan di suatu negara. Urutan urutan buku telepon akan ada, jika masih ada buku telepon ... Sistem operasi Anda menyediakannya.
Misalnya, di Debian Linux Anda dapat menggunakan:
locale -a
untuk menampilkan semua lokal yang dihasilkan. Dan:
dpkg-reconfigure locales
sebagai pengguna root (salah satu cara dari beberapa) untuk menghasilkan / menginstal lebih banyak.