Postgresql postgis将字符串坐标重新格式化为st_PointFromText()的格式
我在postgresql表中有一列Postgresql postgis将字符串坐标重新格式化为st_PointFromText()的格式,postgresql,postgis,Postgresql,Postgis,我在postgresql表中有一列loc_coords,包含纬度和经度数据。该列中的数据如下所示: (34.0539, -118.463) 为了使用Postgis函数ST_PointFromText()我必须重新格式化此文本以删除逗号和括号,这意味着: 34.0539 -118.463 我一直在试图找到一种方法来一次性完成这些替换,但不断出现错误。以下是我在SQL中一直尝试做的事情: WITH comma_repl as ( SELECT replace(loc_coords,',', ''
loc_coords
,包含纬度和经度数据。该列中的数据如下所示:
(34.0539, -118.463)
为了使用Postgis
函数ST_PointFromText()
我必须重新格式化此文本以删除逗号和括号,这意味着:
34.0539 -118.463
我一直在试图找到一种方法来一次性完成这些替换,但不断出现错误。以下是我在SQL中一直尝试做的事情:
WITH comma_repl as (
SELECT replace(loc_coords,',', '') FROM t_active_bus),
rparen as (
SELECT replace(loc_coords, '(','') FROM comma_repl),
lparen as (
SELECT replace(loc_coords, ')', '') FROM rparen)
UPDATE t_active_bus
SET st_loc = st_pointfromtext('POINT(||lparen||)',4326);
但是我一直收到一个错误,loc\u coords
没有退出。我猜想错误是关于loc\u coords
不存在于rparen
和lparen
的子查询中
有没有关于如何解决这个问题的建议,哪怕是更好的解决方法?您是否尝试过创建一个函数来实现这一点
create or replace function process_coords() returns text as $$
begin;
return replace(replace(replace($1,'(',''),')',''),',','');
end;
$$ language 'plpgsql';
UPDATE t_active_bus
SET st_loc = st_pointfromtext('POINT(' || process_coords(loc_coords) || ')',4326);
那太好了。是的,我真的在想我是否应该创建一个函数。谢谢你的指导。