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

如何移除SQL表字段中竖线至分号间的指定字符?

解决方法

针对你需要移除|(包含)到;之间所有字符的需求,最直接的方案是用正则表达式全局替换,不同SQL方言的具体实现如下:

1. MySQL/MariaDB

使用REGEXP_REPLACE函数匹配目标模式并替换:

SELECT REGEXP_REPLACE(your_column, '\|[^;]+', '; ') AS cleaned_keywords
FROM your_table;
  • 匹配规则:\|转义匹配竖线,[^;]+匹配竖线后到分号前的所有非分号字符;替换为; 后直接得到目标格式。

2. PostgreSQL

同样用REGEXP_REPLACE,需指定全局替换标志'g':

SELECT REGEXP_REPLACE(your_column, '\|[^;]+', '; ', 'g') AS cleaned_keywords
FROM your_table;

3. SQL Server

2017及以上版本(支持正则)

SELECT REGEXP_REPLACE(your_column, '\|[^;]+', '; ') AS cleaned_keywords
FROM your_table;

旧版本(无正则支持)

通过拆分-截取-拼接实现:

SELECT STRING_AGG(SUBSTRING(split_val, 1, CHARINDEX('|', split_val) - 1), '; ') AS cleaned_keywords
FROM your_table
CROSS APPLY STRING_SPLIT(your_column, ';') AS split(split_val)
WHERE split_val <> '';
  • 逻辑:先按;拆分字符串,对每个片段截取|前的关键词,最后用STRING_AGG拼接成目标格式。

4. Oracle

SELECT REGEXP_REPLACE(your_column, '\|[^;]+', '; ') AS cleaned_keywords
FROM your_table;

效果验证

原字符串:

keyword|44500903-8f09-40d8-a908-5fb3e03d145e;keyword2|441fb756-ff0a-473f-ad70-2f78d679e7d9

处理后结果:
keyword; keyword2

为什么substring/trim不适用?

你的字符串是重复的键值对模式,substring只能处理固定位置的字符截取,无法批量处理多个重复结构;而正则可以全局匹配所有符合|UUID的片段,一次性完成替换,效率和适用性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:25:08