如何在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,3REGEXP_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
相关产品推荐
相关产品推荐

