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

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

PostgreSQL教程 -》数据类型 -》访问数组

文章来源: 更新时间:2023/12/11 16:01:31

在线老师点击咨询:

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

我要咨询

8.15.3. 访问数组

现在,我们可以在该表上运行一些查询。首先,我们展示如何访问一个数组中的一个元素。下面的查询检索在第二季度工资发生变化的雇员的名字:

SELECT name FROM sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2];

name

-------

Carol

(1 row)

数组下标写在方括号内。默认情况下,PostgreSQL为数组使用了一种从1开始的编号习惯,即一个具有n个元素的数组从array[1]开始,结束于array[n]。

下面的查询检索所有员工第三季度的工资:

SELECT pay_by_quarter[3] FROM sal_emp;

pay_by_quarter

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

10000

25000

(2 rows)

我们也可以访问一个数组的任意矩形切片或者子数组。一个数组切片可以通过在一个或多个数组维度上指定下界:上界来定义例如,下面的查询检索Bill在本周头两天日程中的第一项:

SELECT schedule[1:2][1:1] FROM sal_emp WHERE name = 'Bill';

schedule

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

{{meeting},{training}}

(1 row)

如果任何维度被写成一个切片,即包含一个冒号,那么所有的维度都被看成是切片对待。其中任何只有一个数字(无冒号)的维度被视作是从1到指定的数字。例如,下面例子中的[2]被认为是[1:2]:

SELECT schedule[1:2][2] FROM sal_emp WHERE name = 'Bill';

schedule

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

{{meeting,lunch},{training,presentation}}

(1 row)

为了避免和非切片情况搞混,最好在所有的维度上都使用切片语法,例如[1:2][1:1]而不是[2][1:1]。

可以省略一个切片说明符的lower-bound或者 upper-bound(亦可两者都省略),缺失的 边界会被数组下标的上下限所替代。例如:

SELECT schedule[:2][2:] FROM sal_emp WHERE name = 'Bill';

schedule

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

{{lunch},{presentation}}

(1 row)

SELECT schedule[:][1:1] FROM sal_emp WHERE name = 'Bill';

schedule

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

{{meeting},{training}}

(1 row)

如果数组本身为空或者任何一个下标表达式为空,访问数组下标表达式将会返回空值。如果下标超过了数组边界,下标表达式也会返回空值(这种情况不会抛出错误)。例如,如果schedule目前具有的维度是[1:3][1:2],那么引用schedule[3][3]将得到NULL。相似地,使用错误的下标号引用一个数组会得到空值而不是错误。

如果数组本身或者任何一个下标表达式为空,则一个数组切片表达式也会得到空值。但是,在其他情况例如选择一个完全位于当前数组边界之外的切片时,一个切片表达式会得到一个空(零维)数组而不是空值(由于历史原因,这并不符合非切片行为)。 如果所请求的切片和数组边界重叠,那么它会被缩减为重叠的区域而不是返回空。

任何数组值的当前维度可以使用array_dims函数获得:

SELECT array_dims(schedule) FROM sal_emp WHERE name = 'Carol';

array_dims

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

[1:2][1:2]

(1 row)

array_dims产生一个text结果,它便于人类阅读但是不便于程序读取。 Dimensions can also be retrieved with 也可以通过array_upper和array_lower来获得维度,它们将分别返回一个指定数组的上界和下界:

SELECT array_upper(schedule, 1) FROM sal_emp WHERE name = 'Carol';

array_upper

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

2

(1 row)

array_length将返回一个指定数组维度的长度:

SELECT array_length(schedule, 1) FROM sal_emp WHERE name = 'Carol';

array_length

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

2

(1 row)

cardinality返回一个数组中在所有维度上的元素总数。 这实际上是调用unnest将会得到的行数:

SELECT cardinality(schedule) FROM sal_emp WHERE name = 'Carol';

cardinality

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

4

(1 row)

本文地址:http://www.cuug.com.cn/postgresql/jiaocheng/35853130371.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