如何用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
相关产品推荐
相关产品推荐

