SQL Server 2014中如何高效提取字符串内指定螺栓长度整数?
提取SQL Server 2014工程数据表中目标螺栓长度的优化方案
针对你需要从SQL Server 2014工程数据表的描述字段里提取第二个螺栓长度(数值较大、位于字符串末尾固定位置、长度2-3位)的需求,以下是比嵌套IF+SUBSTRING更简洁的实现方案:
示例数据
STUD BOLT SET, SANS 1700, GR 8.8, SANS 1700, GR 8, GALVANISED (8 X M24 X 140 LG C/W 1 NUT, 12 X M24 X 170 LG C/W 1 NUT) STUD BOLT SET, SANS 1700, GR 8.8, SANS 1700, GR 8, GALVANISED (2 X M20 X 80 LG C/W 1 NUT, 6 X M20 X 90 LG C/W 1 NUT) STUD BOLT SET, SANS 1700, GR 8.8, SANS 1700, GR 8, GALVANISED (8 X M24 X 130 LG C/W 1 NUT, 12 X M24 X 150 LG C/W 1 NUT) STUD BOLT SET, ASME B1.1, ASTM A193 B7, ASME B1.1, ASTM A194 GR 2H, GALVANISED (28 x 1 3/4" UN8 x 270 LG C/W 1 NUT)
优化实现方案
利用REVERSE、SUBSTRING和PATINDEX函数组合,无需嵌套条件判断即可自动提取目标数值:
SELECT Description, -- 提取目标螺栓长度 REVERSE( SUBSTRING( REVERSE(Description), CHARINDEX('GL ', UPPER(REVERSE(Description))) + 3, PATINDEX('%[^0-9]%', SUBSTRING(REVERSE(Description), CHARINDEX('GL ', UPPER(REVERSE(Description))) + 3, 10)) - 1 ) ) AS BoltLength FROM EngineeringData; -- 替换为你的实际表名
方案说明
- 反转字符串:将原描述反转,把目标数值后的
LG转换为GL,方便从末尾定位数值位置 - 定位起始点:通过
CHARINDEX找到反转后GL的位置,偏移3位得到目标数值反转后的起始位置 - 提取数字序列:用
PATINDEX匹配从起始点开始的第一个非数字字符,确定数字长度,截取后再反转回原始数值 - 大小写兼容:通过
UPPER处理反转后的字符串,适配描述中可能存在的小写lg情况
这个方案无需手动判断数值长度(2-3位),代码简洁易维护,适配所有符合格式的记录。
内容的提问来源于stack exchange,提问作者L_McUcky
相关产品推荐
相关产品推荐

