将1个坐标列分隔为2个Lat和Long列Postgresql

时间:2016-06-08 20:55:39

标签: sql postgresql

我正在对数据库运行查询,并且表中有一个“坐标”列。坐标列中的数据采用以下格式:

{"lat":40.74,"lng":-73.98}

我需要运行一个查询,在单独的列中显示纬度和经度,因此会有一个标记为“latitude”的列显示40.74,另一列标记为“经度”,显示73.98。

2 个答案:

答案 0 :(得分:0)

假设json是你的列数据类型,你可以选择这样的每个元素:

SELECT 
  column ->>'lat'::text AS lat, 
  column ->>'long'::text AS long 
FROM table

SQLFiddle

另请注意,问题无关紧要,请考虑使用PostGIS来存储和管理空间数据。

答案 1 :(得分:0)

创建表tbPlace ( PlaceId int, coord varchar(255) );

插入tbPlace(placeId,coord) 值(1,'" lat":40.74," lng": - 73.98');

插入tbPlace(placeId,coord) 值(1,'" lat": - 20.74," lng":20.98');

选择 placeId ,cast(substr(coord,instr(coord,' lat')+ 5,instr(coord,',') - instr(coord,' lat' )+5)as float)as latitude1 ,cast(substr(coord,instr(coord,' lng')+ 5,length(coord)-instr(coord,' lng')+ 5)as float)as longitude1 来自tbPlace;

drop table tbplace;