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

如何用SELECT语句移除字符串最后一个点(.)后的所有字符?

移除字符串最后一个点之后内容的SELECT查询方案

针对你的需求,不同SQL数据库有不同的实现方式,以下是几种常用数据库的解决方案:

MySQL/MariaDB

使用SUBSTRING_INDEX函数结合字符计数,取到倒数第一个点之前的所有内容:

SELECT SUBSTRING_INDEX('1110.400000.8001382', '.', CHAR_LENGTH('1110.400000.8001382') - CHAR_LENGTH(REPLACE('1110.400000.8001382', '.', ''))) AS trimmed_str;

解释:

  • CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, '.', ''))计算字符串中点的总数(此处为2)
  • SUBSTRING_INDEX按点分隔字符串,取前2个部分并自动用点连接,得到1110.400000

PostgreSQL

推荐用正则表达式替换,简洁高效:

SELECT REGEXP_REPLACE('1110.400000.8001382', '\.[^.]*$', '') AS trimmed_str;

解释:

  • 正则\.[^.]*$匹配最后一个点(\.),以及后续所有非点字符([^.]*)直到字符串结尾($)
  • 把匹配到的内容替换为空,直接得到目标结果

也可以用数组转换的方式:

SELECT ARRAY_TO_STRING(STRING_TO_ARRAY('1110.400000.8001382', '.')[:array_length(STRING_TO_ARRAY('1110.400000.8001382', '.'), 1)-1], '.') AS trimmed_str;

SQL Server

方法1:反转字符串定位最后一个点

SELECT LEFT('1110.400000.8001382', LEN('1110.400000.8001382') - CHARINDEX('.', REVERSE('1110.400000.8001382'))) AS trimmed_str;

解释:

  • REVERSE反转字符串后,CHARINDEX找到第一个点的位置(对应原字符串最后一个点的位置)
  • 用原字符串长度减去这个位置,得到需要保留的字符长度,再用LEFT截取

方法2:正则替换(SQL Server 2016+)

SELECT REGEXP_REPLACE('1110.400000.8001382', '\.[^.]*$', '') AS trimmed_str;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:10:15