You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL修改经纬度字段类型报错,SELECT正常ALTER异常求助

问题原因

你的REGEXP_REPLACE("LATITUDE",',','.')仅替换了字符串中的第一个逗号,但表中存在包含多个逗号的异常值(比如报错提示的"3.890,225,016")。替换后这个值会变成"3.890.225,016",这种包含多个小数点和剩余逗号的格式无法转换为float类型,直接导致ALTER语句报错。

而SELECT语句大概率只是返回了部分格式正常(仅含一个逗号)的数据,或者你恰好没查询到那条异常数据,所以看起来执行正常。

解决步骤
  1. 定位异常数据:先找出所有包含多个逗号的经纬度值,明确数据的实际含义:
SELECT "LATITUDE", "LONGITUDE" FROM col_name 
WHERE "LATITUDE" LIKE '%,%,%' OR "LONGITUDE" LIKE '%,%,%';
  1. 修正异常值:根据业务逻辑处理这些异常数据:
    • 如果是输入错误(多打了逗号),直接修正为单逗号格式(如3.890225016);
    • 如果是千分位分隔格式被错误输入(比如3,890,225.016被写成3.890,225,016),需先清理多余逗号,再转换为正确小数格式。
  2. 调整ALTER语句:如果业务允许全局替换所有逗号为小数点,可使用带全局替换参数的语句:
ALTER TABLE col_name ALTER COLUMN "LATITUDE" TYPE float 
USING REGEXP_REPLACE("LATITUDE", ',', '.', 'g')::float;

注意:REGEXP_REPLACE的第四个参数'g'表示全局替换,会替换字符串中所有逗号,请确认这种转换符合业务数据的实际意义,避免错误转换。

内容的提问来源于stack exchange,提问作者Elif Aktas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:45:10