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

SQL Server中为逗号分隔字符串按规则添加百分号的实现方法

在SQL Server中为逗号分隔字符串的数字前缀添加百分号格式

场景说明

你的数据是某列中以逗号分隔的子串,每个子串开头的数字代表百分比(0-100),需要将数字后添加% ,把类似48FGTG的格式转为48% FGTG。


方法1:使用正则表达式替换(SQL Server 2017及以上版本)

SQL Server 2017及之后支持REGEXP_REPLACE函数,直接通过正则匹配每个子串开头的数字部分,替换为带百分号的格式:

UPDATE 你的表名
SET 目标列名 = REGEXP_REPLACE(目标列名, '(\d+)([A-Za-z]+)', '$1% $2', 1, 0, 'i')

正则说明

  • (\d+):匹配子串开头的1到多个数字(对应百分比数值),作为第一个捕获组
  • ([A-Za-z]+):匹配数字后的字母部分,作为第二个捕获组
  • $1% $2:将匹配到的内容替换为“数字+%+空格+字母部分”
  • 'i':忽略大小写,确保大小写字母都能匹配

方法2:兼容旧版本(SQL Server 2016及以下)

旧版本没有正则和STRING_AGG,需要通过字符串拆分、逐元素处理、再合并的方式实现:

步骤1:拆分字符串

使用STRING_SPLIT(SQL Server 2016及以上)将逗号分隔的字符串拆分为行:

SELECT 
    t.主键列,
    s.value AS 原始子串
FROM 你的表名 t
CROSS APPLY STRING_SPLIT(t.目标列名, ',') s

步骤2:处理每个子串

通过字符串函数提取数字和字母部分,拼接成目标格式:

SELECT 
    主键列,
    CONCAT(
        LEFT(原始子串, PATINDEX('%[^0-9]%', 原始子串) - 1),
        '% ',
        RIGHT(原始子串, LEN(原始子串) - PATINDEX('%[^0-9]%', 原始子串) + 1)
    ) AS 处理后子串
FROM (
    SELECT 
        t.主键列,
        s.value AS 原始子串
    FROM 你的表名 t
    CROSS APPLY STRING_SPLIT(t.目标列名, ',') s
) AS temp

步骤3:合并处理后的子串

使用FOR XML PATH合并回逗号分隔的字符串,完成更新:

WITH 处理后的子串 AS (
    SELECT 
        t.主键列,
        CONCAT(
            LEFT(s.value, PATINDEX('%[^0-9]%', s.value) - 1),
            '% ',
            RIGHT(s.value, LEN(s.value) - PATINDEX('%[^0-9]%', s.value) + 1)
        ) AS 子串
    FROM 你的表名 t
    CROSS APPLY STRING_SPLIT(t.目标列名, ',') s
)
UPDATE t
SET t.目标列名 = STUFF((
    SELECT ',' + 子串
    FROM 处理后的子串 s
    WHERE s.主键列 = t.主键列
    FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM 你的表名 t

注意事项

  • 如果子串开头的数字包含前导零(比如07EWR),上述方法会保留前导零,符合需求
  • 确保表中有主键列用于关联拆分和合并的行
  • 测试时建议先使用SELECT语句验证结果,再执行UPDATE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:45:36