You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS-Access(SQL):使用小数参数时MID()函数的异常表现

MS Access SQL中MID()函数处理小数参数的异常行为解析

在MS Access的SQL环境中,使用MID()函数搭配小数类型的长度参数时,会出现与预期不符的结果,以下是具体测试与原因分析:

测试数据

表:Test
ID  Name    Surname 
1   Jamal   Winstone 
2   Joe     Roan 
3   Jake    Tumble 
4   Lea     More

执行的SQL语句

SELECT MID(Surname, ID, LEN(Name)/2) FROM Test 

实际返回结果

Expr1000 
Wi 
oa 
mb 
e

预期结果

MID(Winstone, 1, LEN(Jamal)/2) = MID(Winstone, 1, 5/2) = MID(Winstone, 1, 2.5) = Wi (仅2个字符)
MID(Roan, 2, LEN(Joe)/2) = MID(Roan, 2, 3/2) = MID(Roan, 2, 1.5) = o (仅1个字符)
MID(Tumble, 3, LEN(Jake)/2) = MID(Tumble, 3, 4/2) = MID(Tumble, 3, 2) = mb (2个字符)
MID(More, 4, LEN(Lea)/2) = MID(More, 4, 3/2) = MID(More, 4, 1.5) = e (仅1个字符)

原因分析

MS Access的MID()函数仅接受整数类型的长度参数,当传入小数时,会通过**银行家舍入法(四舍六入五成双)**将小数转换为整数,而非直接截断小数部分:

  • 对于2.5:舍入到最近的偶数2,因此取2个字符,得到Wi
  • 对于1.5:舍入到最近的偶数2,因此从第2位开始取2个字符,得到oa
  • 整数参数2直接生效,取2个字符得到mb
  • 对于1.5舍入为2,但More从第4位开始仅剩1个字符,因此返回e

这种舍入规则是MS Access内部对非整数参数的默认处理逻辑,导致了结果与直接截断小数部分的预期不符。

内容的提问来源于stack exchange,提问作者monika95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:35:16