Access查询如何提取字符串空格前文本且无空格时不报错
Access查询提取首空格前文本的解决方案
原表达式错误原因
你给出的表达式多嵌套了一层不必要的Len()函数,导致逻辑判断完全失效:InStr()函数本身返回数值型结果,匹配到空格时返回空格的位置序号,匹配不到时直接返回0,不需要再用Len()计算返回值的长度。你写的Len(InStr([FirstName]," ")=0)的判断分支永远不会按预期触发,最终导致返回结果不符合要求。
修正后的标准写法
直接去掉多余的Len()即可正常工作:
FName: Left([FirstName], IIf(InStr([FirstName], " ") = 0, Len([FirstName]), InStr([FirstName], " ") - 1))
逻辑说明
- 存在空格时:
InStr返回第一个空格的位置,减1后取左侧对应长度的字符,得到空格前的内容 - 不存在空格时:
InStr返回0,直接取整个字段的长度返回完整内容,不会触发报错
更简化的可选写法(Access 2000及以上版本支持)
用Split函数按空格拆分字符串,直接取第一个拆分结果,代码更简洁:
FName: Split([FirstName], " ")(0)
内容的提问来源于stack exchange,提问作者SteveH
相关产品推荐
相关产品推荐

