![](/img/trans.png)
[英]Find simple position of regexp match in string in PostgreSQL
[英]Position of string-match in PostgreSQL 9.5 array
我正在尝试搜索匹配字符串的数组位置,我看到有一个帖子在字符串上有一个字符的位置,但没有一个带有数组的帖子,这是我想要实现的示例:
array['potato-salad','cucumber-salad','eggplant-pie','potato-soup']
我想知道包含“potato”这个词的元素在哪里,所以结果应该是这样的:
[1,4]
我试图获取所有元素的长度,然后将数组转换为字符串,并搜索字符串以查看字符串匹配的位置并比较位置是否可以在任何数组元素长度之间,但这不会如果数组中的元素数量是可变的,则工作,而在我的问题中,它是可变的。
如果你想完全匹配使用array_positions
:
CREATE TABLE my_tab(ID INT, col VARCHAR(100)[]);
INSERT INTO my_tab(ID, col)
VALUES (1, array['potato-salad','cucumber-salad','eggplant-pie','potato-soup']),
(2, array['potato']);
询问:
SELECT *
FROM my_tab
,LATERAL array_positions(col, 'potato-salad') AS s(potato_salad_position)
WHERE s.potato_salad_position <> '{}';
输出:
╔════╦════════════════════════════════════════════════════════╦═══════════════════════╗
║ id ║ col ║ potato_salad_position ║
╠════╬════════════════════════════════════════════════════════╬═══════════════════════╣
║ 1 ║ {potato-salad,cucumber-salad,eggplant-pie,potato-soup} ║ {1} ║
╚════╩════════════════════════════════════════════════════════╩═══════════════════════╝
如果您想使用带有通配符的LIKE
搜索,您可以使用unnest WITH ORDINALITY
:
SELECT id, array_agg(rn) AS result
FROM my_tab
,LATERAL unnest(col) WITH ORDINALITY AS t(val,rn)
WHERE val LIKE '%potato%'
GROUP BY id;
输出:
╔════╦════════╗
║ id ║ result ║
╠════╬════════╣
║ 1 ║ {1,4} ║
║ 2 ║ {1} ║
╚════╩════════╝
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.