-- 数据库posgresql
-- 主要是地理数据geometry的查询与插入,最后是常用的分页查询和总记录数量查询
-- 地理数据库查询geometry
-- st_astext查询geometry,结果以文本的形式返回
-- 三维点
select st_astext(st_makepoint(3.11,4.22, 0));
-- 二维点
select st_astext(st_makepoint(3.11,4.22));
-- 四维点
select st_astext(st_makepoint(3.11,4.22, 0,4));
-- st_asgeojson查询geometry,结果以geojson的形式返回
select st_asgeojson(st_makepoint(3.11,4.22, 0));
select st_asgeojson(geom::geometry) from hot_point;
select st_astext(geom::geometry) from hot_point;
-- 地理数据中有二维,三维,四维的
-- 高纬度数据转低纬度数据,舍弃掉高纬度的某些维度值。如三维转二维,高度就舍弃了。
-- 低纬度转高纬度,默认填充高度0。二维转三维,高度默认为。
-- st_force3d将数据转为三维。
select st_asgeojson(st_force3d(st_makepoint(3.11,4.22))) ; -- srid默认为0 二维数据
-- st_force2d将数据转成二维
select st_asgeojson(st_force2d(st_makepoint(3.11,4.22,0)));-- srid默认为0 三维数据
-- 四维转二维
select st_asgeojson(st_force2d(st_makepoint(3.11,4.22,0,0)));-- srid默认为0 四维数据
-- 指定的空间引标识符,st_makepoint(3.11,4.22)::geometry)转换
-- 二维转三维
select st_asgeojson(st_force3d(st_makepoint(3.11,4.22)::geometry)) ; -- srid默认为0 二维数据
-- 三维转二维
select st_asgeojson(st_force2d(st_makepoint(3.11,4.22,0)::geometry));-- srid默认为0 三维数据
-- 四维转二维
select st_asgeojson(st_force2d(st_makepoint(3.11,4.22,0,0)::geometry));-- srid默认为0 四维数据
-- 插入点geometry
select st_makepoint(3.11,4.22);
-- 插入点geometry
select st_geomfromtext('point(3.11 4.22)');
select st_asgeojson(st_geomfromtext('point(3.11 4.22)'));
select st_makepolygon('LINESTRING(0.0 0.0, 4.0 0.0, 4.0 4.0, 0.0 4.0, 0.0 0.0)');
select st_asgeojson(st_makepolygon('LINESTRING(0.0 0.0, 4.0 0.0, 4.0 4.0, 0.0 4.0, 0.0 0.0)'));
-- 插入多边形。多边形点组成的多边形必须是闭合的,开始点与终止点一致
select st_makepolygon(st_geomfromtext('LINESTRING(0.0 0.0, 4.0 0.0, 4.0 4.0, 0.0 4.0, 0.0 0.0)'));
select st_asgeojson(st_makepolygon(st_geomfromtext('LINESTRING(0.0 0.0, 4.0 0.0, 4.0 4.0, 0.0 4.0, 0.0 0.0)')));
-- st_contains面包含点,不包括边界包含
select st_contains(st_makepolygon('LINESTRING(0.0 0.0, 4.0 0.0, 4.0 4.0, 0.0 4.0, 0.0 0.0)'), st_makepoint(2.0, 2.0)); -- 没有设置的srid默认为0
-- 插入数据及设置
-- 插入指定空间引用标识符的geometry
select st_srid(st_makepoint(2.0, 2.0));
select st_setsrid(st_makepoint(112.0, 23.0), 4326)::geometry as geom;
select st_asgeojson(st_setsrid(st_makepoint(112.0, 23.0), 4326)::geometry) as geom;
select st_asgeojson(st_setsrid(st_makepoint(112.0, 23.0), 4326)) as geom;
select st_astext(st_setsrid(st_makepoint(112.0, 23.0), 4326)) as geom;
select st_astext( geometry(st_makepoint(112.0, 23.5))); -- geometry对象
-- st_collect geometry为元素的聚合函数
select st_collect(geometry(st_makepoint(112.0, 23.5))::geometry);
select st_collect(geometry(st_makepoint(112.0, 23.5)));
-- srid默认或指定
select count(geom),
st_collect(geom),
st_collect(geom::geometry),
st_asgeojson(st_collect(geom)),
st_asgeojson(st_collect(geom::geometry)),
array_agg(st_asgeojson(geom))
from (
select st_makepoint(112.0, 23.5) as geom
where 1=1
union all
select st_makepoint(112.0,23.5) as geom
where 1=1
union all
select st_makepoint(112.0,23.5) as geom
where 1=1
) a;
-- 字符截取,substr闭合区间
select substr('STRING_SEQUENCE', 1,6);
-- 切割到数组,单行仍是单行,但是结果是以分隔符做分隔后的元素集为数组
select regexp_split_to_array('STRING_SEQUENCE', '_');
-- 切割到表,单行变多行
select regexp_split_to_table('STRING_SEQUENCE', '_');
-- group by 分页并返回group by表的总记录数
-- 下面group by后有四条记录
select name, count(1) over() as count
from(
select 'A' as name
where 1=1
union all
select 'B' as name
where 1=1
union all
select 'C' as name
where 1=1
union all
select 'D' as name
where 1=1
) a
group by name
limit 1 offset 0;
-- count(1) over() as count 分页并返回表的总记录数
select name, count(1) over() as count
from(
select 'Rose' as name
where 1=1
union all
select 'Jack' as name
where 1=1
) a
limit 1 offset 0;