如何使用SQL SUBSTRING函数从文件名中准确提取目标字符串
问题说明
- 需求:使用
SUBSTRING函数从下划线分隔的文件名中提取指定字段 - 测试文件名:
73186_RHIMagnesita_PHI_StopLoss_TruncSSN_NonRedact_Inc_to_Apr2022_Paid_to_Apr2022_EDIT - 目标提取值:
RHIMagnesita - 原有写法:
SUBSTRING(DFH.FileName, CHARINDEX('_', DFH.FileName) + 1, CHARINDEX('_PHI', DFH.FileName) - 1)
- 原有写法返回结果:
RHIMagnesita_PHI_S,不符合预期
错误原因
SQL Server中SUBSTRING函数的第三个参数是需要截取的字符长度,不是截取的结束位置。原有写法的第三个参数计算的是「字符串开头到_PHI前一位的总长度」,没有扣除第一个下划线之前的字符长度,导致截取范围超出目标字段边界。
修正方案
调整第三个参数的计算逻辑,用_PHI的起始位置减去第一个下划线的位置,再减1,得到两个分隔符之间的准确字符长度:
SUBSTRING( DFH.FileName, CHARINDEX('_', DFH.FileName) + 1, CHARINDEX('_PHI', DFH.FileName) - CHARINDEX('_', DFH.FileName) - 1 )
用测试文件名验证计算逻辑:
- 第一个
_的位置是6,截取起始位为7 _PHI的起始位置是18- 截取长度为
18 - 6 - 1 = 11,和RHIMagnesita的字符长度完全匹配,可准确返回目标值。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

