返回首页

gbase数据、南大通用产品文档:GBase8c几何类型转换函数

更新日期:2024年09月11日


box(circle)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
250
描述:将圆转换成矩形
返回类型:box
示例:
gbase=# SELECT box(circle '((0,0),2.0)') AS RESULT;
result
---------------------------------------------------------------------------
(1.41421356237309,1.41421356237309),(-1.41421356237309,-1.41421356237309)
(1 row)

box(point, point)
描述:将点转换成矩形
返回类型:box
示例:
gbase=# SELECT box(point '(0,0)', point '(1,1)') AS RESULT;
result
-------------
(1,1),(0,0)
(1 row)

box(polygon)
描述:将多边形转换成矩形
返回类型:box
示例:
gbase=# SELECT box(polygon '((0,0),(1,1),(2,0))') AS RESULT;
result
-------------
(2,1),(0,0)
(1 row)

circle(box)
描述:矩形转换成圆
返回类型:circle

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
251
示例:
gbase=# SELECT circle(box '((0,0),(1,1))') AS RESULT;
result
-------------------------------
<(0.5,0.5),0.707106781186548>
(1 row)

circle(point, double precision)
描述:将圆心和半径转换成圆
返回类型:circle
示例:
gbase=# SELECT circle(point '(0,0)', 2.0) AS RESULT;
result
-----------
<(0,0),2>
(1 row)

circle(polygon)
描述:将多边形转换成圆
返回类型:circle
示例:
gbase=# SELECT circle(polygon '((0,0),(1,1),(2,0))') AS RESULT;
result
-------------------------------------------
<(1,0.333333333333333),0.924950591148529>
(1 row)

lseg(box)
描述:矩形对角线转化成线段
返回类型:lseg
示例:
gbase=# SELECT lseg(box '((-1,0),(1,0))') AS RESULT;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
252
result
----------------
[(1,0),(-1,0)]
(1 row)

lseg(point, point)
描述:点转换成线段
返回类型:lseg
示例:
gbase=# SELECT lseg(point '(-1,0)', point '(1,0)') AS RESULT;
result
----------------
[(-1,0),(1,0)]
(1 row)

slope(point, point)
描述:计算两个点构成直线的斜率
返回类型: double
示例:
gbase=# SELECT slope(point '(1,1)', point '(0,0)') AS RESULT;
result
--------
1
(1 row)

path(polygon)
描述:多边形转换成路径
返回类型:path
示例:
gbase=# SELECT path(polygon '((0,0),(1,1),(2,0))') AS RESULT;
result
---------------------
((0,0),(1,1),(2,0))

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
253
(1 row)

point(double precision, double precision)
描述:节点
返回类型:point
示例:
gbase=# SELECT point(23.4, -44.5) AS RESULT;
result
--------------
(23.4,-44.5)
(1 row)

point(box)
描述:矩形的中心
返回类型:point
示例:
gbase=# SELECT point(box '((-1,0),(1,0))') AS RESULT;
result
--------
(0,0)
(1 row)

point(circle)
描述:圆心
返回类型:point
示例:
gbase=# SELECT point(circle '((0,0),2.0)') AS RESULT;
result
--------
(0,0)
(1 row)

point(lseg)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
254
描述:线段的中心
返回类型:point
示例:
gbase=# SELECT point(lseg '((-1,0),(1,0))') AS RESULT;
result
--------
(0,0)
(1 row)

point(polygon)
描述:多边形的中心
返回类型:point
示例:
gbase=# SELECT point(polygon '((0,0),(1,1),(2,0))') AS RESULT;
result
-----------------------
(1,0.333333333333333)
(1 row)

polygon(box)
描述:矩形转换成4 点多边形
返回类型:polygon
示例:
gbase=# SELECT polygon(box '((0,0),(1,1))') AS RESULT;
result
---------------------------
((0,0),(0,1),(1,1),(1,0))
(1 row)

polygon(circle)
描述:圆转换成12 点多边形
返回类型:polygon

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
255
示例:
gbase=# SELECT polygon(circle '((0,0),2.0)') AS RESULT;
result
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
----------------------------------------------------------------
((-2,0),(-1.73205080756888,1),(-1,1.73205080756888),(-1.22464679914735e-16,2),
(1,1.73205080756888),(1.73205080756888,1),(2,2.44929359829471e-16),(1.7320508
0756888,-0.999999999999999),(1,-1.73205080756888),(3.67394039744206e-16,-2),(
-0.999999999999999,-1.73205080756888),(-1.73205080756888,-1))
(1 row)

polygon(npts, circle)
描述:圆转换成npts 点多边形
返回类型:polygon
示例:
gbase=# SELECT polygon(12, circle '((0,0),2.0)') AS RESULT;
result
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
----------------------------------------------------------------
((-2,0),(-1.73205080756888,1),(-1,1.73205080756888),(-1.22464679914735e-16,2),
(1,1.73205080756888),(1.73205080756888,1),(2,2.44929359829471e-16),(1.7320508
0756888,-0.999999999999999),(1,-1.73205080756888),(3.67394039744206e-16,-2),(
-0.999999999999999,-1.73205080756888),(-1.73205080756888,-1))
(1 row)

polygon(path)
描述:路径转换成多边形

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
256
返回类型:polygon
示例:
gbase=# SELECT polygon(path '((0,0),(1,1),(2,0))') AS RESULT;
result
---------------------
((0,0),(1,1),(2,0))
(1 row)

 摘要:
检查与服务器的连接是否工作。如果连接丢失,将自动尝试再连接。



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 33 -
该函数可被闲置了较长时间的客户端使用,用以检查服务器是否已关闭了
连接,并在必要时再次连接。
 语法:
int
gbase_ping(GBASE *gbase);
 参数:
 返回值:
如果与服务器的连接有效返回0。如果出现错误,返回非0 值。返回的非0
值不表示GBase 服务器本身是否已关闭,连接可能因其他原因终端,如网络问
题等。

GROUP BY ROLLUP 函数
语法
GROUP BY ROLLUP( (…),(…),…)
功能
对ROLLUP 后面括号里的n 个字段或表达式组合做GROUP BY 操作,最后将结
果合并在一起,组合方式为n、n-1、n-2、…、1、0。
详细解释
GROUP BY ROLLUP(A,B,C) (A、B、C 代表语法中的“(…)”)
1.
首先会对(A、B、C)进行GROUP BY;
2.
然后对(A、B)进行GROUP BY;
3.
然后是(A)进行GROUP BY;
4.
最后对全表进行GROUP BY 操作,即包含未出现在GROUP BY ROLLUP 函数
中的字段或表达式进行group by 操作,不出现的字段或表达式用NULL
代替
5.
最终将所有结果合并在一起(相当于UNION ALL 操作),如果n 个字段或表
达式中的一个或多个在某一分组中不出现在GROUP BY 后面,用NULL 代
替不出现的字段或表达式。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
887
create database if not exists db1;
drop table if exists t1;
create table t1 (a int,b int,c int);
insert into t1 values (1,3,5),(2,4,6);
gbase> select * from t1 group by rollup(a,b,c);
+------+------+------+
| a
| b
| c
|
+------+------+------+
|
1 |
3 |
5 |①
|
2 |
4 |
6 |①
|
1 |
3 | NULL |②
|
2 |
4 | NULL |②
|
1 | NULL | NULL |③
|
2 | NULL | NULL |③
| NULL | NULL | NULL |④
+------+------+------+
7 rows in set (Elapsed: 00:00:00.08)
gbase> select *,sum(a),max(b),min(c) from t1 group by rollup(a,b,c);
+------+------+------+--------+--------+--------+
| a
| b
| c
| sum(a) | max(b) | min(c) |
+------+------+------+--------+--------+--------+
|
2 |
4 |
6 |
2 |
4 |
6 |①
|
1 |
3 |
5 |
1 |
3 |
5 |①
|
2 |
4 | NULL |
2 |
4 |
6 |②
|
1 |
3 | NULL |
1 |
3 |
5 |②
|
2 | NULL | NULL |
2 |
4 |
6 |③
|
1 | NULL | NULL |
1 |
3 |
5 |③
| NULL | NULL | NULL |
3 |
4 |
5 |④
+------+------+------+--------+--------+--------+
7 rows in set (Elapsed: 00:00:00.09)
通常该函数用于统计例如商品的明细,小计以及最后总计的场景。
示例
示例中所用的表及数据:
DROP TABLE IF EXISTS t3;
CREATE TABLE t3 (color_type varchar(20),color_count int, in_date date);
INSERT INTO t3 (color_type,in_date,color_count)
VALUES('black','2010-09-11',18),
('black','2010-10-05',18),('black','2010-10-13',31),
('blue','2010-09-21',23),('blue','2010-09-30',15),
('blue','2010-10-11',62),('red','2010-09-12',41),
('red','2010-10-01',12),('red','2010-10-05',11);
示例1:GROUP BY ROLLUP(color_type,f_YearMonth)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
888
gbase> SELECT NVL(color_type,'') as color_type_show,DECODE(NVL(co
lor_type,''),'','总计',NVL(f_YearMonth,color_type || ' 小计')) AS f_YearMo
nth_show,SUM(color_count) FROM (SELECT color_type,DATE_FORMAT
(in_date, '%Y-%m') as f_YearMonth,color_count FROM t3) t GROUP B
Y ROLLUP(color_type,f_YearMonth) ORDER BY color_type,f_YearMont
h;
+-----------------+------------------+------------------+
| color_type_show | f_YearMonth_show | SUM(color_count) |
+-----------------+------------------+------------------+
| black
| 2010-09
|
18 |
| black
| 2010-10
|
49 |
| black
| black 小计
|
67 |
| blue
| 2010-09
|
38 |
| blue
| 2010-10
|
62 |
| blue
| blue 小计
|
100 |
| red
| 2010-09
|
41 |
| red
| 2010-10
|
23 |
| red
| red 小计
|
64 |
|
| 总计
|
231 |
+-----------------+------------------+------------------+
10 rows in set