因此,我想使用string_to_array将此字符串转换为数组,然后查询第三个逗号值。我有这样的想法
SELECT * FROM table1 WHERE string_to_array(data1, ',')[2] = '2'
但这似乎不起作用。有人有什么建议吗?
o2rvlv0m1#
获取第三个元素:
SELECT *, elements[3] as third_element FROM table1 CROSS JOIN string_to_array(data1, ',') as elements
查询第三个元素:
SELECT * FROM table1 CROSS JOIN string_to_array(data1, ',') as elements where elements[3]::varchar = '2'
注意:第一个元素位于位置1(不是0)Demo here
mwg9r5ms2#
你的查询不起作用,因为数组元素在PostgreSQL中是基于1的,而不是像许多其他编程语言那样基于0的。尝试以下代码,我将查询改为查找string_to_array数组的第三个成员等于'2'的行:
SELECT * FROM table1 WHERE (string_to_array(data1, ','))[3] = '2';
希望它能起作用:)
a2mppw5e3#
Postgres中的数组索引从1开始,而不是0,所以要获得第三个元素,你必须使用索引3,尝试修改你的查询;
SELECT * FROM table1 WHERE string_to_array(data1, ',')[3] = '2';
3条答案
按热度按时间o2rvlv0m1#
获取第三个元素:
查询第三个元素:
注意:第一个元素位于位置1(不是0)
Demo here
mwg9r5ms2#
你的查询不起作用,因为数组元素在PostgreSQL中是基于1的,而不是像许多其他编程语言那样基于0的。
尝试以下代码,我将查询改为查找string_to_array数组的第三个成员等于'2'的行:
希望它能起作用:)
a2mppw5e3#
Postgres中的数组索引从1开始,而不是0,所以要获得第三个元素,你必须使用索引3,尝试修改你的查询;