如何提取字符串中第3个与第4个空格之间的内容
固定前缀后指定分隔段提取方案
已知所有待处理字符串均包含固定前缀XPTOP XPTOP,需提取全字符串第3个与第4个空格之间的内容,不受目标内容长度影响,不同场景的稳定实现方案如下:
SQL 场景
针对此前用charindex出错的问题,优化后的索引定位写法如下,可避免截断或多取字符:
SELECT SUBSTRING( 待处理字段名, -- 定位第3个空格位置,向后偏移1位作为截取起点 CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名) + 1) + 1) + 1, -- 计算第3、4个空格之间的长度作为截取长度 CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名) + 1) + 1) + 1) - CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名, CHARINDEX(' ', 待处理字段名) + 1) + 1) - 1 ) AS 提取结果 FROM 表名
如果使用支持拆分函数的高版本数据库,写法可简化:
- SQL Server 2016+:
SELECT value AS 提取结果 FROM 表名 CROSS APPLY STRING_SPLIT(待处理字段名, ' ', 1) WHERE ordinal = 3
- MySQL 8.0+:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(待处理字段名, ' ', 3), ' ', -1) AS 提取结果 FROM 表名
Python 场景
单字符串处理
input_str = "XPTOP XPTOP 4WS00632 BLACK VERNIS" target = input_str.split()[2]
Pandas 批量处理
import pandas as pd df['提取结果'] = df['待处理列名'].str.split().str[2]
Excel 场景
待处理内容存放在A1单元格时,公式如下:
=TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))), 2*LEN(A1)+1, LEN(A1)))
内容的提问来源于stack exchange,提问作者António Miranda
相关产品推荐
相关产品推荐

