Perilaku bit
PostgreSQL dan bit varying
Types sangat tidak membantu, dengan cara ia menolak untuk memperluas bitfield untuk operasi, dan memperluasnya ke kanan untuk gips alih-alih memperpanjangnya ke kiri.
Masuk akal jika Pg memperpanjang operan yang lebih kecil ke kiri dengan nol sebelum operasi AND atau OR, daripada gagal.
Anda tidak dapat menggunakan pemeran untuk bit(n)
untuk mendapatkan panjang yang sama, karena untuk beberapa alasan gila dilemparkan ke bit(n)
kanan-pad argumen, membuatnya tidak berguna di hampir semua situasi.
Anda dapat menggunakan sesuatu seperti lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
ke kiri-memperpanjang bidang bit dengan nol ke yang lebih besar dari dua panjang. Ini rumit, tapi itu akan berhasil. Saya akan merekomendasikan menulis fungsi pembungkus untuk menampung kekacauan.
Sebagai alternatif, pertimbangkan untuk memodifikasi bit
kode dukungan di src/backend/utils/adt/varbit.c
untuk menambahkan fungsi ke bidang bit perpanjangan kiri dan potong kiri, dan fungsi untuk melakukan perbandingan ekstensi kiri. Seharusnya cukup mudah berdasarkan kode yang ada.