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

如何在SQL中提取字符串第3个+与第4个+之间的内容

SQL提取字符串中第3个‘+’与第4个‘+’之间的内容

针对示例字符串 'Secondary - WA / 010 - 8104 + R + VET + 14.10.2022 - must',要提取第3个+和第4个+之间的VET,不同SQL方言的实现方式如下:

MySQL 实现

利用SUBSTRING_INDEX函数嵌套实现,先截取到第4个+之前的内容,再提取最后一个+右侧的部分:

SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX('Secondary - WA / 010 - 8104 + R + VET + 14.10.2022  - must', '+', 4), '+', -1)) AS target_content;
  • SUBSTRING_INDEX(..., '+', 4):截取字符串到第4个+的位置,结果为'Secondary - WA / 010 - 8104 + R + VET'
  • SUBSTRING_INDEX(..., '+', -1):从上述结果中提取最后一个+右侧的内容,结果为' VET'
  • TRIM():去除内容前后的空格,最终得到'VET'

SQL Server 实现

通过嵌套CHARINDEX定位第3个和第4个+的位置,再用SUBSTRING截取中间内容:

DECLARE @str NVARCHAR(1000) = 'Secondary - WA / 010 - 8104 + R + VET + 14.10.2022  - must';
DECLARE @pos3 INT = CHARINDEX('+', @str, CHARINDEX('+', @str, CHARINDEX('+', @str, 1) + 1) + 1);
DECLARE @pos4 INT = CHARINDEX('+', @str, @pos3 + 1);

SELECT TRIM(SUBSTRING(@str, @pos3 + 1, @pos4 - @pos3 - 1)) AS target_content;
  • 嵌套CHARINDEX依次找到第1、2、3个+的位置,最终得到第3个+的索引@pos3
  • 基于@pos3找到第4个+的索引@pos4
  • SUBSTRING截取@pos3+1到@pos4-1之间的内容,再用TRIM去空格

PostgreSQL 实现

使用STRING_TO_ARRAY将字符串按+分割为数组,直接取对应位置的元素:

SELECT TRIM((STRING_TO_ARRAY('Secondary - WA / 010 - 8104 + R + VET + 14.10.2022  - must', '+'))[4]) AS target_content;
  • STRING_TO_ARRAY将原字符串拆分为数组,元素为['Secondary - WA / 010 - 8104 ', ' R ', ' VET ', ' 14.10.2022 - must']
  • 数组下标从1开始,取第4个元素后用TRIM去除空格,得到'VET'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:02:57