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

bit varying in Postgres to be queried by sub-string pattern

以下 Postgres table 包含一些示例内容,其中二进制数据存储为位变化 (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  

问:是否有任何查询(本机 SQL 或作为 Postgres 函数)到 return 二进制数据字段等于 all[=32= 的所有行] 目标位数组的子字符串。为了更清楚地让我们看一下示例搜索值 01101:

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

结果 returned 应包含行:3、4、5 和 10。

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

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

此外,我发现这个关于固定大小的 Postgres 位与可变位的讨论很有帮助: PostgreSQL Bitwise operators with bit varying "cannot AND bit strings of different sizes"

我认为您正在寻找按位和:

where col2 & B'01101' = col2

怎么样

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