SQL Server中如何将含逗号的SQL列格式化为正确的数字格式
SQL Server 数字格式转换解决方案
适用场景
需要将数字字符串末尾后接两位数字的逗号替换为小数点,其余位置逗号保留,符合以下转换规则:
| Incorrect | 目标格式 |
|---|---|
| 123,452,03 | 123,452.03 |
| 234.00 | 234.00 |
| 456,02 | 456.02 |
方案1:SQL Server 2017 及以上版本(支持正则函数)
直接使用内置的REGEXP_REPLACE函数实现,匹配逻辑为仅捕获字符串末尾、后接恰好两位数字的逗号进行替换:
SELECT 你的字段名, REGEXP_REPLACE(你的字段名, ',(\d{2})$', '.$1') AS 格式化后字段 FROM 你的表名
正则规则说明
,(\d{2})$:$表示匹配字符串末尾位置,\d{2}表示匹配两位数字,括号将两位数字捕获为分组1- 替换逻辑为将匹配到的逗号替换为小数点,保留捕获到的两位数字
方案2:SQL Server 2016 及更低版本兼容方案
低版本不支持正则函数时,可使用原生字符串函数实现相同逻辑:
SELECT 你的字段名, CASE WHEN LEN(你的字段名) >= 3 AND SUBSTRING(你的字段名, LEN(你的字段名)-2, 1) = ',' THEN STUFF(你的字段名, LEN(你的字段名)-2, 1, '.') ELSE 你的字段名 END AS 格式化后字段 FROM 你的表名
逻辑说明
- 先判断字段长度是否≥3,且倒数第三个字符为逗号(即逗号后恰好有两位数字在字符串末尾)
- 符合条件时用
STUFF函数将该位置的逗号替换为小数点,不符合条件则返回原值
内容的提问来源于stack exchange,提问作者Raptor776
相关产品推荐
相关产品推荐

