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:
- 01101 -> 无结果
- 0110 -> 无结果
- 011 -> 3
- 01 -> 4
- 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 || '%')
以下 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:
- 01101 -> 无结果
- 0110 -> 无结果
- 011 -> 3
- 01 -> 4
- 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 || '%')