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

PostgreSQL中字符串添加小数点结果异常,求正确SQL实现方案

解决PostgreSQL字符串在倒数第一个字符前加小数点的问题

问题场景

数据表table(注意:table是PostgreSQL关键字,建议改用其他表名或用双引号包裹"table")的col1列数据如下:

col1 
A018
B672

需要将col1处理为倒数第一个字符前添加小数点的格式,预期输出:

col1   col2
A018   A01.8
B672   B67.2

原SQL的问题

你使用的正则表达式'(.{2})(?!$)'逻辑错误:它会匹配每两个连续字符(只要后面不是字符串结尾),并在其后添加小数点,导致替换结果不符合预期。

正确解法

方法1:使用字符串截取函数(推荐,性能更优)

通过left()截取除最后一个字符外的部分,right()截取最后一个字符,再用||拼接小数点:

WITH missed_codes AS (
    SELECT 
        col1, 
        left(col1, length(col1) - 1) || '.' || right(col1, 1) AS col2
    FROM "table"  -- 用双引号包裹关键字table避免语法错误
)
SELECT * FROM missed_codes;

方法2:使用正则表达式替换

匹配所有字符直到倒数第一个位置,再拼接小数点和最后一个字符:

WITH missed_codes AS (
    SELECT 
        col1, 
        regexp_replace(col1, '(.*)(.)$', '\1.\2') AS col2
    FROM "table"
)
SELECT * FROM missed_codes;

两种方法都能得到预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:35:19