PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.11. 几何函数和操作符

简介: 9.11. 几何函数和操作符 几何类型point、box、 lseg、line、path、 polygon和circle有一大堆本地支持函数和操作符,如表 9.33、表 9.34和表 9.35中所示。

9.11. 几何函数和操作符

几何类型pointbox、 lseglinepath、 polygoncircle有一大堆本地支持函数和操作符,如表 9.33表 9.34表 9.35中所示。

小心

请注意same as操作符(~=),表示pointboxpolygoncircle类型的一般相等概念。这些类型中的某些还有一个=操作符,但是=只比较相同的面积。其它的标量比较操作符 (<=等等)也是为这些类型比较面积。

表 9.33. 几何操作符

操作符 描述 例子
+ 平移 box '((0,0),(1,1))' + point '(2.0,0)'
- 平移 box '((0,0),(1,1))' - point '(2.0,0)'
* 缩放/旋转 box '((0,0),(1,1))' * point '(2.0,0)'
/ 缩放/旋转 box '((0,0),(2,2))' / point '(2.0,0)'
# 相交的点或方框 box '((1,-1),(-1,1))' # box '((1,1),(-2,-2))'
# 路径或多边形中的点数 # path '((1,0),(0,1),(-1,0))'
@-@ 长度或周长 @-@ path '((0,0),(1,0))'
@@ 中心 @@ circle '((0,0),10)'
## 第二个操作数上最接近第一个操作数的点 point '(0,0)' ## lseg '((2,0),(0,2))'
<-> 距离 circle '((0,0),1)' <-> circle '((5,0),1)'
&& 是否重叠?(只要有一个公共点这就为真) box '((0,0),(1,1))' && box '((0,0),(2,2))'
<< 是否严格地在左侧? circle '((0,0),1)' << circle '((5,0),1)'
>> 是否严格地在右侧? circle '((5,0),1)' >> circle '((0,0),1)'
&< 没有延展到右边? box '((0,0),(1,1))' &< box '((0,0),(2,2))'
&> 没有延展到左边? box '((0,0),(3,3))' &> box '((0,0),(2,2))'
<<| 严格在下? box '((0,0),(3,3))' <<| box '((3,4),(5,5))'
|>> 严格在上? box '((3,4),(5,5))' |>> box '((0,0),(3,3))'
&<| 没有延展到上面? box '((0,0),(1,1))' &<| box '((0,0),(2,2))'
|&> 没有延展到下面? box '((0,0),(3,3))' |&> box '((0,0),(2,2))'
<^ 在下面(允许相切)? circle '((0,0),1)' <^ circle '((0,5),1)'
>^ 在上面(允许相切)? circle '((0,5),1)' >^ circle '((0,0),1)'
?# 相交? lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'
?- 水平? ?- lseg '((-1,0),(1,0))'
?- 水平对齐? point '(1,0)' ?- point '(0,0)'
?| 垂直? ?| lseg '((-1,0),(1,0))'
?| 垂直对齐? point '(0,1)' ?| point '(0,0)'
?-| 相互垂直? lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'
?|| 平行? lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'
@> 包含? circle '((0,0),2)' @> point '(1,1)'
<@ 包含在内或在上? point '(1,1)' <@ circle '((0,0),2)'
~= 相同? polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'

注意

PostgreSQL之前,包含操作符@><@被分别称为~@。 这些名字仍然可以使用,但是已被废除并且最终将被移除。

表 9.34. 几何函数

函数 返回类型 描述 例子
area(object) double precision 面积 area(box '((0,0),(1,1))')
center(object) point 中心 center(box '((0,0),(1,2))')
diameter(circle) double precision 圆的直径 diameter(circle '((0,0),2.0)')
height(box) double precision 方框的垂直尺寸 height(box '((0,0),(1,1))')
isclosed(path) boolean 一个封闭路径? isclosed(path '((0,0),(1,1),(2,0))')
isopen(path) boolean 一个开放路径? isopen(path '[(0,0),(1,1),(2,0)]')
length(object) double precision 长度 length(path '((-1,0),(1,0))')
npoints(path) int 点数 npoints(path '[(0,0),(1,1),(2,0)]')
npoints(polygon) int 点数 npoints(polygon '((1,1),(0,0))')
pclose(path) path 将路径转换成封闭的 pclose(path '[(0,0),(1,1),(2,0)]')
popen(path) path 将路径转换成开放 popen(path '((0,0),(1,1),(2,0))')
radius(circle) double precision 圆的半径 radius(circle '((0,0),2.0)')
width(box) double precision 方框的水平尺寸 width(box '((0,0),(1,1))')

表 9.35. 几何类型转换函数

函数 返回类型 描述 例子
box(circle) box 圆到方框 box(circle '((0,0),2.0)')
box(point) box 点到空方框 box(point '(0,0)')
box(pointpoint) box 点到方框 box(point '(0,0)', point '(1,1)')
box(polygon) box 多边形到方框 box(polygon '((0,0),(1,1),(2,0))')
bound_box(boxbox) box 盒到边界框 bound_box(box '((0,0),(1,1))', box '((3,3),(4,4))')
circle(box) circle 方框到圆 circle(box '((0,0),(1,1))')
circle(pointdouble precision) circle 中心和半径到圆 circle(point '(0,0)', 2.0)
circle(polygon) circle 多边形到圆 circle(polygon '((0,0),(1,1),(2,0))')
line(pointpoint) line 点到线 line(point '(-1,0)', point '(1,0)')
lseg(box) lseg 方框对角线到线段 lseg(box '((-1,0),(1,0))')
lseg(pointpoint) lseg 点到线段 lseg(point '(-1,0)', point '(1,0)')
path(polygon) path 多边形到路径 path(polygon '((0,0),(1,1),(2,0))')
point(double precisiondouble precision) point 构造点 point(23.4, -44.5)
point(box) point 方框的中心 point(box '((-1,0),(1,0))')
point(circle) point 圆的中心 point(circle '((0,0),2.0)')
point(lseg) point 线段的中心 point(lseg '((-1,0),(1,0))')
point(polygon) point 多边形的中心 point(polygon '((0,0),(1,1),(2,0))')
polygon(box) polygon 方框到4点多边形 polygon(box '((0,0),(1,1))')
polygon(circle) polygon 圆到12点多边形 polygon(circle '((0,0),2.0)')
polygon(nptscircle) polygon 点到npts点多边形 polygon(12, circle '((0,0),2.0)')
polygon(path) polygon 路径到多边形 polygon(path '((0,0),(1,1),(2,0))')

我们可以把一个point的两个组成数字当作具有索引 0 和 1 的数组访问。例如,如果t.p是一个point列,那么SELECT p[0] FROM t检索 X 座标而 UPDATE t SET p[1] = ...改变 Y 座标。同样,box或者lseg类型的值可以当作两个point值的数组值看待。

函数area可以用于类型boxcirclepatharea函数操作path数据类型的时候, 只有在path的点没有交叉的情况下才可用。例如,path '((0,0),(0,1),(2,1),(2,2),(1,2),(1,0),(0,0))'::PATH是不行的, 而下面的视觉上相同的 path '((0,0),(0,1),(1,1),(1,2),(2,2),(2,1),(1,1),(1,0),(0,0))'::PATH就可以。 如果交叉和不交叉的path概念让你疑惑,那么把上面两个path都画在一张图纸上,你就明白了。

本文转自PostgreSQL中文社区,原文链接:9.11. 几何函数和操作符

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
907 5
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
1756 2
|
11月前
|
SQL 人工智能 数据挖掘
如何在`score`表中正确使用`COUNT`和`AVG`函数?SQL聚合函数COUNT与AVG使用指南
本文三桥君通过score表实例解析SQL聚合函数COUNT和AVG的常见用法。详解COUNT(studentNo)、COUNT(score)、COUNT()的区别,以及AVG函数对数值/字符型字段的不同处理,特别指出AVG()是无效语法。实战部分提供6个典型查询案例及结果,包含创建表、插入数据的完整SQL代码。产品专家三桥君强调正确理解函数特性(如空值处理、字段类型限制)对数据分析的重要性,帮助开发者避免常见误区,提升查询效率。
534 0
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
405 3
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
3092 5
|
关系型数据库 分布式数据库 数据库
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
683 0
|
存储 缓存 关系型数据库
|
存储 SQL 并行计算
PolarDB for PostgreSQL 开源必读手册-开源PolarDB for PostgreSQL架构介绍(中)
PolarDB for PostgreSQL 开源必读手册-开源PolarDB for PostgreSQL架构介绍
880 0

推荐镜像

更多