如何在SQL Server中将长字符串内反引号子串的空格替换为下划线
SQL Server 2019 反引号内空格替换方案
实现逻辑
按反引号 ` 拆分目标字符串,仅对成对反引号包裹的内容执行空格转下划线操作,其余位置的空格保持不变。利用 SQL Server 2019 原生支持的 OPENJSON 保证拆分顺序,STRING_AGG 完成结果拼接,可兼容 VARCHAR(MAX) 类型的超长字符串。
单变量测试代码
DECLARE @InputStr VARCHAR(MAX) = '`the night is dark` as A , `the day is shining` as B , `wind moves but breeze flows` as C '; SELECT @InputStr = STRING_AGG( CASE WHEN [key] % 2 = 1 THEN REPLACE(value, ' ', '_') ELSE value END, '`' ) FROM OPENJSON('["' + REPLACE(STRING_ESCAPE(@InputStr, 'json'), '`', '","') + '"]'); -- 输出处理后结果 SELECT @InputStr AS OutputStr;
运行后输出结果完全匹配需求:
'`the_night_is_dark` as A , `the_day_is_shining` as B , `wind_moves_but_breeze_flows` as C '
表字段批量处理代码
假设你的表名为YourTable,主键字段为ID,待处理字段为Content,批量处理写法如下:
SELECT t.ID, processed.Content AS ProcessedContent FROM YourTable t CROSS APPLY ( SELECT STRING_AGG( CASE WHEN [key] % 2 = 1 THEN REPLACE(value, ' ', '_') ELSE value END, '`' ) AS Content FROM OPENJSON('["' + REPLACE(STRING_ESCAPE(t.Content, 'json'), '`', '","') + '"]') ) processed
注意事项
- 逻辑自动兼容存在未闭合反引号的场景,未闭合反引号后的内容不会被误替换
STRING_ESCAPE会自动转义原字符串中的特殊字符,避免JSON解析报错
内容的提问来源于stack exchange,提问作者Ankit Vohra
相关产品推荐
相关产品推荐

