Hành vi của bit
của PostgreSQL và bit varying
các kiểu cực kỳ vô ích, với cách nó từ chối mở rộng trường bit cho các hoạt động và nó mở rộng chúng sang phải cho các phôi thay vì mở rộng chúng sang trái.
Pg sẽ có ý nghĩa nếu mở rộng sang trái toán hạng nhỏ hơn với các số 0 trước một phép toán AND hoặc OR, thay vì không thành công.
Bạn không thể sử dụng truyền đến bit(n)
để có cùng độ dài, vì vì một lý do điên rồ nào đó mà truyền thành bit(n)
miếng đệm bên phải lập luận, khiến nó trở nên vô dụng trong hầu hết mọi tình huống.
Bạn có thể sử dụng một cái gì đó như lpad($1::text, greatest(length($1), length($2)),'0')::bit varying
mở rộng sang trái một trường bit có số 0 đến lớn hơn hai độ dài. Nó cồng kềnh, nhưng nó sẽ hoạt động. Tôi khuyên bạn nên viết các hàm trình bao bọc để chứa mớ hỗn độn.
Ngoài ra, hãy xem xét sửa đổi bit
mã hỗ trợ trong src/backend/utils/adt/varbit.c
để thêm các chức năng vào các trường bit mở rộng sang trái và cắt bớt bên trái và các chức năng để thực hiện so sánh mở rộng sang trái. Nó sẽ khá dễ dàng dựa trên mã hiện có.