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

使用CHARINDEX去除数值最后一个点后字符时遇函数不存在错误

解决PostgreSQL中去除字符串最后一个点及后续内容的问题

报错原因

你之前用的CHARINDEX是SQL Server专属函数,PostgreSQL不支持这个函数,所以才会触发“function charindex(unknown, character varying) does not exist”的错误。PostgreSQL里查找字符位置,需要用STRPOS或POSITION这类原生函数。

两种可行的UPDATE方案

方案一:字符串反转+截取实现

通过反转字符串定位最后一个点的位置,再截取原字符串对应部分:

UPDATE dutch_textile
SET total_value_guldens = LEFT(total_value_guldens, LENGTH(total_value_guldens) - STRPOS(REVERSE(total_value_guldens), '.'))
WHERE total_value_guldens LIKE '%.%';

逻辑说明:

  • REVERSE(total_value_guldens)将字符串反转,比如把“5823.9.8”转为“8.9.3285”
  • STRPOS(...)定位反转后第一个点的位置(示例中是2)
  • 用原字符串总长度减去该位置,得到需要截取的长度(7-2=5),最终截取前5位得到“5823.9”

方案二:正则表达式替换(更简洁)

直接用正则匹配最后一个点及后面的所有内容,替换为空字符串:

UPDATE dutch_textile
SET total_value_guldens = REGEXP_REPLACE(total_value_guldens, '\.[^.]*$', '')
WHERE total_value_guldens LIKE '%.%';

正则说明:

  • \.[^.]*$匹配字符串结尾处的最后一个点(\.),以及点后面所有非点字符([^.]*)
  • 将匹配到的部分替换为空,即可得到去掉最后一个点及后续内容的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:37:11