我正在尝试在 Access 2013 中的日期/时间字段上连接两个表。一个表是本地 Access 表,另一个是来自 SQL Server 2012 的链接表。内部联接只返回它应该返回的大约一半值(两个表最初都是从同一个 native Access 表填充的)。
SELECT sample.*, r.*
FROM tblWQResultStaging_SingleParam AS r
INNER JOIN dbo_tblWQSample AS sample
ON (r.datetime_utc = sample.sample_datetime);
tblWQResultStaging_SingleParam 的示例数据(这是 Access native 表;数据按 Access 格式化):
日期时间_UTC
91 年 7 月 30 日下午 6:50:00
92 年 3 月 24 日下午 6:15:00
91 年 1 月 29 日晚上 9 点 30 分
91 年 3 月 26 日晚上 9:10:00
来自 dbo_tblWQSample 的示例数据(这是 SQL Server 链接表;按 Access 格式化):
样本日期时间
91 年 1 月 29 日晚上 9 点 30 分
91 年 3 月 26 日晚上 9:10:00
91 年 7 月 30 日下午 6:50:00
92 年 3 月 24 日下午 6:15:00
上面的查询结果:
样本日期时间
91 年 1 月 29 日晚上 9 点 30 分
91 年 3 月 26 日晚上 9:10:00
我已经尝试了多种 SQL Server 日期/时间字段类型 - datetime、datetime2(7)、datetime2(0)、smalldatetime - 但它们都不起作用,尽管在更改字段类型和删除/重新加载后刷新了链接表数据。
到目前为止,我的最佳猜测是舍入问题导致一些(但不是全部)日期以与原始 Access 数据不同的值加载到 SQL Server,但我不能确定。
最佳答案
在Access中,日期实际上是 double 的,并且可以有比可见存储更详细的时间信息(例如毫秒)
将 Access 中的日期与 SQL Server 中的日期进行比较时,应使用 DateDiff
函数并检查差异是否为 0 秒:
SELECT sample.*, r.*
FROM tblWQResultStaging_SingleParam AS r
INNER JOIN dbo_tblWQSample AS sample
ON (DateDiff("s", r.datetime_utc, sample.sample_datetime) = 0);
关于sql - 在 DateTime 上加入有时会在 Access 和 SQL Server 之间失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731059/