在日期时间上加入有时会在 Access 和 SQL Server 之间失败



我正在尝试在日期/时间字段上联接 Access 2013 中的两个表。 一个表是本地 Access 表,另一个是 SQL Server 2012 中的链接表。 内部联接仅返回大约一半的值(这两个表最初都是从同一个本机 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 本机表;按 Access 设置格式的数据(:


datetime_utc 91-07-30 下午
06:50:00 92-03-24 下午
6:15:00 91-01-29 下午
9:30:00 91-03-26 下午9:10:00

来自dbo_tblWQSample的示例数据(这是 SQL Server 链接表;按 Access 设置格式(:


sample_datetime 91-01-29 下午
9:30:00 91-03-26 下午
9:10:00 91-07-30 下午
6:50:00 92-03-24 下午6:15:00

上述查询的结果:


sample_datetime 91-01-29 下午
09:30:00 91-03-26 下午9:10:00

我尝试了多种SQL Server日期/时间字段类型 - datetime,datetime2(7(,datetime2(0(,smalldatetime - 尽管在更改字段类型并删除/重新加载数据后刷新链接表,但它们都不起作用。

到目前为止,我得到的最佳猜测是,舍入问题导致一些(但不是全部(日期加载到 SQL Server,其值与原始 Access 数据不同,但我不能确定。

在 Access 中,日期实际上是双精度,并且可以具有比可见存储的更详细的时间信息(例如毫秒(

将 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);

最新更新