如何在Access VBA中处理datetime2类型日期?
解决Access中datetime2类型转换报错的问题
问题原因
Access的CDate()和DateValue()函数不支持带有7位微秒的日期字符串,而SQL Server的datetime2类型默认返回的日期格式(如2024-06-04 07:26:19.1466667)包含微秒,导致转换时触发类型不匹配错误。
解决方案
不用放弃datetime2(微软推荐的新类型,比旧datetime范围更广、精度更高),可以通过以下两种方式兼容:
1. 在SQL Server存储过程中预处理日期
直接在存储过程里把datetime2值转换为Access兼容的格式(保留到3位毫秒),避免Access端处理复杂字符串:
-- 转换为yyyy-mm-dd hh:mi:ss.fff格式,Access可直接识别 SELECT CONVERT(varchar(23), YourDateTime2Column, 121) AS CompatibleDateTime FROM YourTable;
2. 在Access端截取字符串后转换
如果必须在Access中处理带微秒的日期字符串,先截取到毫秒部分再调用转换函数:
' 截取前23位(保留到毫秒)后转日期 ?CDate(Left("2024-06-04 07:26:19.1466667", 23)) ' 输出结果:2024/6/4 7:26:19
要不要换回datetime类型?
不建议。datetime2是微软官方推荐的新开发首选类型,相比datetime:
- 支持的日期范围更大(从0001-01-01到9999-12-31,datetime仅支持1753-01-01起)
- 精度更高(最高7位微秒,datetime仅3位毫秒)
- 存储效率更优
通过上述转换方案即可解决兼容问题,无需退回旧类型。
内容的提问来源于stack exchange,提问作者TheMortiestMorty
相关产品推荐
相关产品推荐

