MySQL如何用RIGHT函数替换倒数第三位逗号且保留完整字段值
解决方法
你之前的写法仅处理了字段的最后三位字符,没有保留前缀内容,因此会出现结果截断的问题。可以通过单条UPDATE语句完成全量转换,不需要分步执行:
核心逻辑
- 第一步:将原始字段中所有
.替换为, - 第二步:定位替换后字符串中最后一个
,的位置 - 第三步:拼接「最后一个逗号之前的全部内容」+
.+「最后一个逗号之后的全部内容」
具体实现语句
MySQL 版本
先执行SELECT验证结果是否符合预期:
SELECT `column` AS 原始值, CONCAT( SUBSTRING_INDEX(REPLACE(`column`, '.', ','), ',', LENGTH(REPLACE(`column`, '.', ',')) - LENGTH(REPLACE(REPLACE(`column`, '.', ','), ',', ''))), '.', SUBSTRING_INDEX(REPLACE(`column`, '.', ','), ',', -1) ) AS 转换后值 FROM `table`;
验证无误后执行UPDATE:
UPDATE `table` SET `column` = CONCAT( SUBSTRING_INDEX(REPLACE(`column`, '.', ','), ',', LENGTH(REPLACE(`column`, '.', ',')) - LENGTH(REPLACE(REPLACE(`column`, '.', ','), ',', ''))), '.', SUBSTRING_INDEX(REPLACE(`column`, '.', ','), ',', -1) );
SQL Server 版本
验证语句:
SELECT [column] AS 原始值, CONCAT( LEFT(REPLACE([column], '.', ','), LEN(REPLACE([column], '.', ',')) - CHARINDEX(',', REVERSE(REPLACE([column], '.', ',')))), '.', RIGHT(REPLACE([column], '.', ','), CHARINDEX(',', REVERSE(REPLACE([column], '.', ','))) - 1) ) AS 转换后值 FROM [table];
更新语句:
UPDATE [table] SET [column] = CONCAT( LEFT(REPLACE([column], '.', ','), LEN(REPLACE([column], '.', ',')) - CHARINDEX(',', REVERSE(REPLACE([column], '.', ',')))), '.', RIGHT(REPLACE([column], '.', ','), CHARINDEX(',', REVERSE(REPLACE([column], '.', ','))) - 1) );
注意事项
- 转换过程不会修改字段原有char类型,若转换结果末尾出现多余固定长度补全的空格,可在拼接逻辑外层加
TRIM()函数处理 - 所有更新操作执行前务必先验证转换结果,避免误改数据
内容的提问来源于stack exchange,提问作者savsana222
相关产品推荐
相关产品推荐

