如何使用 LIKE 运算符在数组中搜索

YOG*_*HRA 4 arrays postgresql database-design string-matching sequelize.js

编号 | 名称 | IP地址           
---+----------+-------------------------
  1 | 测试名称 | {192.168.1.60,192.168.1.65}

我想ipAddress用 进行搜索LIKE。我试过:

{'$mac_ip_addresses.ip_address$': { [OP.contains]: [searchItem]}},
Run Code Online (Sandbox Code Playgroud)

这也:

{'$mac_ip_addresses.ip_address$': { [OP.Like] : { [OP.any]: [searchItem]}}},
Run Code Online (Sandbox Code Playgroud)

的数据类型ipAddress是text[]. 我想用 进行ipAddress搜索LIKE。 searchItem包含需要在ipAddress字段中搜索的 IP,因此我想在数组中搜索LIKE.

fil*_*rem 6

我不知道 Sequelize,但我可以从 postgres 方面回答。

PostgreSQL 中没有用于搜索数组内部模式的简短语法。

如果您想单独检查每个数组元素的模式,那么您需要使用以下方法展开数组unnest:

SELECT id, name, ipaddress
FROM testing
WHERE EXISTS (
  SELECT 1 FROM unnest(ipaddress) AS ip
  WHERE ip LIKE '8.8.8.%'
);
Run Code Online (Sandbox Code Playgroud)

如果经常以这种方式搜索数组,最好以标准化形式存储数据。

然而,有一个简短的语法(加上 GIN 索引支持)用于基于相等的搜索(请参阅此处的@>和其他运算符)。

SELECT id, name, ipaddress
FROM testing
WHERE ipaddress @> ARRAY['8.8.8.8'];
Run Code Online (Sandbox Code Playgroud)