博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
postgresql 数组类型
阅读量:6589 次
发布时间:2019-06-24

本文共 2619 字,大约阅读时间需要 8 分钟。

--pg支持数组,且支持分片访问,比如[1:2],任意只有一个数字(没有冒号)的维数是从 1 开始到声明的数字为止的 --如果任意维数被写为一个片段,也就是,包含一个冒号,那么所有维数都被当做是片段If any dimension is written as a slice, i.e., contains a colon, then all dimensions are treated as slices. Any dimension that has only a single number (no colon) is treated as being from 1 to the number specified. For example, [2] is treated as [1:2], as in this example:SELECT schedule[1:2][2] FROM sal_emp WHERE name = 'Bill';--任何数组的当前维数都可以用 array_dims 函数检索:SELECT array_dims(schedule) FROM sal_emp WHERE name = 'Carol';array_dims------------[1:2][1:2]--也可以用 array_upper 和 array_lower 函数分别返回数组特定维的上界和下界:SELECT array_upper(schedule, 1) FROM sal_emp WHERE name = 'Carol'--如果数组本身或任何下标表达式是 NULL ,那么该数组的下标表达式也将生NULL 。 从一个数组的当前范围之外抓取数据将生成一个 NULL ,而不是导致错误 --array_length可用于返回指定维数的长充SELECT array_length(schedule, 1) FROM sal_emp WHERE name = 'Carol';array_length--------------2--cardinality 返回任意维数的元素个数--cardinality returns the total number of elements in an array across all dimensions. It is effectively the number of rows a call to unnest would yield:SELECT cardinality(schedule) FROM sal_emp WHERE name = 'Carol';cardinality-------------4--更新指定索引的数组值UPDATE sal_emp SET pay_by_quarter[4] = 15000 WHERE name = 'Bill';--更新指定分片的数组值UPDATE sal_emp SET pay_by_quarter[1:2] = '{27000,27000}' WHERE name = 'Carol';--可以通过给一个尚不存在数组元素赋值的办法扩大数组, 所有位于原数组最后一个元素和这个新元素之间的未赋值元素都将设为 NULL 。 --例如,如果 myarray数组当前有 4 个元素, 在对 myarray[6]赋值之后它将拥有 6 个元素,其中myarray[5] 的值将为 NULL--检索数组中是否包含任一元素,或者包含所有的元素SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter);SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);--检索数组包含元素的索引,注意第一个函数匹配第一次满足条件的,第二个函数匹配所有的满足条件的SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon'),array_positions(ARRAY[1, 4, 3, 1, 3, 4, 2, 1], 1); array_position | array_positions ----------------+-----------------              2 | {1,4,8}                                          --数组运算中的一些比较符运算符                  描述a = b                   立方体a和b是相同的a && b                  立方体a和b重叠a @> b                  立方体a包含立方体ba <@ b                  立方体a被包含在立方体b中[a, b] < [c, d]         小于[a, b] > [c, d]         大于postgres=# select array[1,2,3],array[2,3,4];  array  |  array  ---------+--------- {1,2,3} | {2,3,4}--两个群组中是否有重叠 postgres=# select array[1,2,3]&&array[2,3,4]; ?column? ---------- t--第一个数组是否包含第二个数组postgres=# select array[1,2,3]@>array[2,3,4]; ?column? ---------- f postgres=# select array[1,2,3]@>array[2,3];   ?column? ---------- t--第一个数组是否被第二个数组包含 postgres=# select array[1,2,3]<@array[2,3]; ?column? ---------- f postgres=# select array[1,2,3]<@array[1,2,3,4]; ?column? ---------- t(1 row)

转载地址:http://zduio.baihongyu.com/

你可能感兴趣的文章
spring boot 1.5.4 整合webService(十五)
查看>>
modsecurity(尚不完善)
查看>>
获取.propertys文件获取文件内容
查看>>
Redis3.0.5配置文件详解
查看>>
Keepalived+Nginx实现高可用
查看>>
Know about Oracle RAC Heartbeat
查看>>
JQuery——实现Ajax应用
查看>>
前端05.js入门之BOM对象与DOM对象。
查看>>
oracle kill所有plsql developer进程
查看>>
12c rac 实例无法启动之磁盘组空间耗尽
查看>>
keepalived双机热备原理及实例部署LVS+keepalived
查看>>
曲线学习PyQt5方案一
查看>>
企业私有云之rabbitmq高可用
查看>>
OpenCV学习】矩阵运算和操作2
查看>>
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
查看>>
Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
查看>>
关于在arm裸板编程时使用printf问题的解决方法
查看>>
开源人工智能技术将改变一切
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>