如何在MS Access中使用等效的SQL通用日期格式?
MS Access 跨区域通用日期写法
MS Access 完全支持等效的跨区域通用日期写法,效果和你在其他数据库里用'YYYYMMDD'的无歧义写法一模一样,只要适配它自己的SQL语法规则,就能实现不管设备是美制、英制还是其他区域设置,都能正确解析日期的效果。
具体写法要求
- Access 的日期常量不能像通用SQL那样用单引号
'包裹,必须用#(井号)作为前后定界符——用单引号的话,引擎会走字符串转日期的隐式逻辑,这一步完全受系统区域设置影响,很容易出现解析错位的问题。 - 真正无区域歧义的日期格式,是年在前、用短横线分隔的ISO格式,比如
#2021-01-15#。不管当前系统的日期格式设置成月/日/年还是日/月/年,Jet/ACE引擎都会严格按照「年-月-日」的顺序解析这个值,不会出现月、日错位的问题。
容易踩的坑
- 别用斜杠分隔的日期写常量,比如
#01/15/2021#这类写法的解析逻辑完全绑定系统区域:在英制区域的设备上,引擎会把第一个数值当月、第二个当日,看到15作为月份会直接报错;在美制设备上又会按相反顺序读取,完全没有跨环境通用性。 - 不推荐照搬通用SQL里的纯无分隔8位数字写法,比如
#20210115#:Access 的日期类型本质是代表天数偏移的数值,这类没有分隔的8位数字字面量,会被引擎优先当成普通数值,按照日期序列号规则映射成1900年之后几万天的无效值,根本不是你想要的2021年的日期,稳定性远不如带短横线的ISO格式。
你的查询场景直接可用的写法
你原本要筛选Datecol字段日期大于等于2021年1月15日的记录,在Access里的通用兼容SQL写法是:Where Datecol >= #2021-01-15#
如果需要带时间判断,只要在日期后追加时间部分即可,比如筛选2021年1月15日15:30之后的记录,写法为Where Datecol >= #2021-01-15 15:30:00#,同样不受区域设置影响。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

