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

如何在SQL中替换字符串?将,1,,2,3,转换为1|2|3

SQL字符串替换解决方案:,1,,2,3,转1|2|3

你的问题出在直接用REPLACE会把所有逗号替换成竖线,包括首尾的逗号和中间的连续逗号,导致结果多了首尾竖线和重复竖线。要实现需求,需要分两步:去掉首尾逗号 + 把中间连续的逗号替换成单个竖线,不同SQL方言的实现如下:

Oracle(你用到dual表,优先参考这个)

用TRIM去掉首尾逗号,再用REGEXP_REPLACE匹配连续逗号替换成竖线:

SELECT REGEXP_REPLACE(TRIM(BOTH ',' FROM ',1,,2,3,'), ',+', '|') FROM dual;
  • TRIM(BOTH ',' FROM ...):移除字符串首尾的所有逗号,得到1,,2,3
  • REGEXP_REPLACE(..., ',+', '|'):把一个或多个连续的逗号替换成单个|,最终得到1|2|3

也可以用一次正则完成,可读性稍弱:

SELECT REGEXP_REPLACE(',1,,2,3,', '(^,)|(,$)|(,+)', CASE WHEN '\3' IS NOT NULL THEN '|' ELSE '' END) FROM dual;

MySQL 8.0+

同样结合TRIM和正则替换:

SELECT REGEXP_REPLACE(TRIM(BOTH ',' FROM ',1,,2,3,'), ',+', '|');

如果是MySQL 5.x(无正则替换函数),可以嵌套REPLACE先合并连续逗号,再处理:

-- 多次REPLACE处理连续逗号(如果有更多连续逗号,需要多嵌套几次)
SELECT REPLACE(TRIM(BOTH ',' FROM REPLACE(REPLACE(',1,,2,3,', ',,', ','), ',,', ',')), ',', '|');

SQL Server 2016+

方法一:正则替换+去首尾逗号

SELECT REGEXP_REPLACE(TRIM(',' FROM ',1,,2,3,'), ',+', '|');

方法二:拆分后过滤空值再聚合(更直观)

SELECT STRING_AGG(value, '|') 
FROM STRING_SPLIT(',1,,2,3,', ',') 
WHERE value <> '';

内容的提问来源于stack exchange,提问作者Duy Nguyen TPV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:11