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

