我正在尝试在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年7月30日下午6:50:00
92/03/24 6:15:00 PM
91年1月29日下午9:30:00
91年3月26日9:10:00
从dbo_tblWQSample采样数据(这是SQL Server链接表;按Access格式化):
sample_datetime
91年1月29日下午9:30:00
91/03/26 9:10:00 PM
91年7月30日下午6:50:00
03/24/92 6:15:00 PM
上面查询的结果:
sample_datetime
91年1月29日下午9:30:00
91年3月26日9:10:00
我尝试了多种SQL Server日期/时间字段类型-datetime,datetime2(7),datetime2(0),smalldatetime-尽管更改了字段类型并删除/重新加载后刷新了链接表,但它们都不起作用数据。
到目前为止,我最好的猜测是舍入问题导致某些(但不是全部)日期以与原始Access数据不同的值被加载到SQL Server,但我不能确定。 / p>
答案 0 :(得分:1)
在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);