专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > postgresql > 教程 > PostgreSQL教程 -》数据类型 -》在数组中搜索

PostgreSQL教程 -》数据类型 -》在数组中搜索

文章来源: 更新时间:2023/12/11 16:02:14

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

8.15.5. 在数组中搜索

要在一个数组中搜索一个值,每一个值都必须被检查。这可以手动完成,但是我们必须知道数组的尺寸。例如:

SELECT * FROM sal_emp WHERE pay_by_quarter[1] = 10000 OR

pay_by_quarter[2] = 10000 OR

pay_by_quarter[3] = 10000 OR

pay_by_quarter[4] = 10000;

但是这对于大型数组来说太过冗长,且在数组尺寸未知时无法使用。一种可选的方法可见第 9.23 节。上面的查询可以被替换为:

SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter);

此外,我们还可以查找所有元素值都为10000的数组所在的行:

SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);

另外,generate_subscripts函数也可以用来完成类似的查找。例如:

SELECT * FROM

(SELECT pay_by_quarter,

generate_subscripts(pay_by_quarter, 1) AS s

FROM sal_emp) AS foo

WHERE pay_by_quarter[s] = 10000;

该函数的描述见表 9.62。

我们也可以使用&&操作符来搜索一个数组,它会检查左操作数是否与右操作数重叠。例如:

SELECT * FROM sal_emp WHERE pay_by_quarter && ARRAY[10000];

该操作符和其他数组操作符的进一步描述请见第 9.18 节。如第 11.2 节所述,它可以使用一个合适的索引来提速。

你也可以使用array_position和array_positions在一个 数组中搜索特定值。前者返回值在数组中第一次出现的位置的下标。后者返回一个数组, 其中有该值在数组中的所有出现位置的下标。例如:

SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon');

array_positions

-----------------

2

SELECT array_positions(ARRAY[1, 4, 3, 1, 3, 4, 2, 1], 1);

array_positions

-----------------

{1,4,8}

提示

数组不是集合,在其中搜索指定数组元素可能是数据设计失误的表现。考虑使用一个独立的表来替代,其中每一行都对应于一个数组元素。这将更有利于搜索,并且对于大量元素的可扩展性更好。

本文地址:http://www.cuug.com.cn/postgresql/jiaocheng/35853134816.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1