使用Mid与InStr提取Access查询中指定连字符间的字符串
Access查询提取连字符分隔字符串指定位置内容的正确表达式
针对你的需求——提取Column_A中第四和第五个连字符之间的内容,以下是正确的查询表达式:
Column_B: Mid([Column_A], InStr(InStr(InStr(InStr([Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-")+1, InStr(InStr(InStr(InStr(InStr([Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-") - InStr(InStr(InStr(InStr([Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-")+1,[Column_A],"-") - 1)
表达式逻辑拆解
- 定位第四个连字符的位置:通过四层嵌套
InStr,依次找到第1到第4个-的位置,最终以第四个-的下一位作为提取起始点。 - 定位第五个连字符的位置:在第四个
-的基础上再嵌套一次InStr,找到第五个-的位置。 - 提取目标内容:用
Mid函数,从第四个-的下一位开始,提取长度为「第五个-位置 - 第四个-位置 - 1」的字符,即为第四和第五个-之间的内容。
测试验证
用你提供的示例数据测试,结果如下:
- 第一行
10-123-20000000-JaneBank-JaneBank1001-Regions→ 提取结果:JaneBank1001 - 第二行
100-1234-40000-NeilBank-NeilBank1201-Regions→ 提取结果:NeilBank1201 - 第三行
10-12125-2232456-ABCAcct-ABCAcct2122-Regions→ 提取结果:ABCAcct2122
你之前表达式的问题
你之前的表达式仅嵌套了1-2层InStr,只能定位到第二个-的位置,因此提取的是第二和第三个-之间的内容,未完成第四、第五个分隔符的定位。
内容的提问来源于stack exchange,提问作者Datamint
相关产品推荐
相关产品推荐

