Postgresql postgis将字符串坐标重新格式化为st_PointFromText()的格式

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,',', ''

我在postgresql表中有一列
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);

那太好了。是的,我真的在想我是否应该创建一个函数。谢谢你的指导。