我有一個變化的位掩碼字段,我想對它執行按位與操作。PostgreSQL位變量的位運算符「不能和不同大小的位字符串」
PG::Error: ERROR: cannot AND bit strings of different sizes
SELECT "groups".* FROM "groups" WHERE (read_roles_bitmask = B'0' OR read_roles_bitmask & B'10' > B'0')
(你需要有不同的長度位掩碼在表中得到這個錯誤。)
我期待的按位數學看起來像下面這樣: 100000010 = 00010
我也嘗試將位掩碼投射到一個沒有運氣的整數。
爲什麼PostgreSQL會窒息?
我應該如何重寫這個查詢來很好地播放?
我可以使用以下方法來獲取位運算符的工作: LPAD(read_roles_bitmask :: VARCHAR,64, '0'):: BIGINT
但是這僅限於64位,有沒有更好的辦法?
這是一個奇怪的限制。我希望Pg的'&'可以自動向零擴展小操作數。 –
@克雷格:「必須是相同的大小」的行爲被記錄在案。另外,'B'10':: bit(1)'是'B'1'','B'1':: bit(2)'是'B'10'',因此位從左到右。我覺得位順序在某個位置發生了變化,所以他們可能會強迫你明確地避免版本問題。 –
它被記錄下來,但坦率地說,右位擴展位域並沒有隱含或明確地提供左延伸選項是沒用的。誰使用從左到右的位串? –