如何在MS Access查询中将DATE()替换为SQL Server的GETDATE()
实现方法分两种场景,根据你使用的查询类型选择:
场景1:使用SQL Server传递查询(可直接调用GETDATE())
普通Access选择查询的表达式会先由Access数据库引擎解析,本身不识别SQL Server的GETDATE()函数,也不会在Access的表达式生成器中展示该函数,需要切换到传递查询模式:
- 打开Access,点击「创建」选项卡→「查询设计」,关闭弹出的表选择窗口
- 点击顶部「设计」选项卡→「传递」,切换为传递查询模式
- 点击「设计」选项卡→「属性表」,在「ODBC连接字符串」栏选择你之前链接SQL Server使用的ODBC数据源
- 直接编写SQL Server语法的查询语句即可,计算日期间隔的示例如下:
注:SELECT DATEDIFF(day, [DATE], CAST(GETDATE() AS DATE)) AS 间隔天数 FROM 你的SQL Server表名CAST(GETDATE() AS DATE)是为了去掉GETDATE()默认携带的时间部分,和Access原生DATE()的输出格式对齐,如果你需要保留时间计算可以去掉这层转换
场景2:继续使用普通Access查询(基于ODBC链接表)
如果你不想改用传递查询,需要提前在SQL Server侧做封装:
- 先在SQL Server中创建视图,提前写入
GETDATE()的计算逻辑,示例:CREATE VIEW vw_日期计算 AS SELECT *, CAST(GETDATE() AS DATE) - [DATE] AS 间隔天数 FROM 你的原表名 - 将这个视图作为链接表新增到Access中,后续在Access普通查询的表达式生成器中,直接调用该链接视图的「间隔天数」字段即可
补充说明:如果你的计算逻辑不需要精确到时间,直接保留Access原生的DATE() - [DATE]写法也能得到正确结果,Access会自动把DATE()的当前日期值转成标准日期格式发送给SQL Server执行查询,不需要额外修改
内容的提问来源于stack exchange,提问作者Robleh100
相关产品推荐
相关产品推荐

