gpt4 book ai didi

sql - 字符串匹配在 PostgreSQL 9.5 数组中的位置

转载 作者:行者123 更新时间:2023-11-29 13:24:25 24 4
gpt4 key购买 nike

我正在尝试搜索匹配字符串的数组位置,我看到有一篇帖子包含字符串中字符的位置,但没有包含数组的帖子,这是我想要实现的示例:

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} ║
╚════╩════════╝

关于sql - 字符串匹配在 PostgreSQL 9.5 数组中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36420960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com