Postgres中的位变化将由子字符串模式查询



下面的Postgres表包含一些示例内容,其中二进制数据存储为可变位(https://www.postgresql.org/docs/10/datatype-bit.html):

ID   |   Binary data
----------------------
1    |    01110        
2    |    0111       
3    |    011         
4    |    01        
5    |    0         
6    |    00011      
7    |    0001        
8    |    000    
9    |    00          
10   |    0  
11   |    110
12   |    11
13   |    1  

Q: 是否有任何查询(本地SQL或Postgres函数(返回二进制数据字段等于目标位数组的所有子字符串的所有行。为了更清楚,让我们看看示例搜索值01101:

  1. 01101->没有结果
  2. 0110->没有结果
  3. 011->3
  4. 01->4
  5. 0->5、10

返回的结果应包含以下行:3、4、5和10。

编辑:工作查询是(感谢Laurenz Albe(:

SELECT * FROM table WHERE '01101' LIKE (table.binary_data::text || '%')

此外,我发现关于固定大小的Postgres比特与可变比特的讨论很有帮助:PostgreSQL位可变运算符";不能与不同大小的位串"与";

怎么样

WHERE '01101' LIKE (col2::text || '%')

我认为您正在寻找比特和:

where col2 & B'01101' = col2

最新更新