如何从右侧计数使用charindex()提取字符串最后两个下划线分隔块?
提取字符串最后两个下划线分隔块的方法及CHARINDEX相关问题解答
关于CHARINDEX()从右侧计数的问题
CHARINDEX()本身没法直接从字符串右边开始数下划线的位置,它默认是从左往右搜索。不过可以通过反转字符串的方式,间接实现“找右侧第N个下划线”的效果,刚好能满足你提取最后两个数据块的需求。
实现提取的SQL代码
假设你的表叫YourTable,目标字段是FieldName,用下面的SQL就能拿到结果:
SELECT FieldName, SUBSTRING( FieldName, LEN(FieldName) - CHARINDEX('_', REVERSE(FieldName), CHARINDEX('_', REVERSE(FieldName)) + 1) + 2, LEN(FieldName) ) AS LastTwoBlocks FROM YourTable;
代码逻辑拆解
- 反转字符串:把原字符串倒过来,比如
123_456_ABC_DEF变成FED_CBA_654_321 - 找第一个反转后的下划线:拿到倒转后第一个下划线的位置,这对应原字符串的最后一个下划线
- 找第二个反转后的下划线:从第一个下划线的下一位开始找第二个下划线,这对应原字符串的倒数第二个下划线
- 计算截取起始位置:用原字符串的总长度减去第二个反转下划线的位置再加2,得到原字符串中倒数第二个下划线后面第一个字符的位置
- 截取目标内容:从这个起始位置截取到字符串末尾,就是最后两个数据块
测试结果
针对你给出的示例数据,运行后会得到:
| FieldName | LastTwoBlocks |
|---|---|
| 123_456_ABC_DEF | ABC_DEF |
| 12_34_456_XYZ_PQR | XYZ_PQR |
| LMN_OPQ_123_456 | 123_456 |
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

