sql - 在 DateTime 上加入有时会在 Access 和 SQL Server 之间失败

标签 sql sql-server datetime ms-access

我正在尝试在 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/

相关文章:

mysql - 根据用户拥有的 "chances"数量分配行

SQL:查找子图

c++ - C++获取QDateTime生成时间的可靠方法

php - 使用 PHP 从 MySQL 日期时间转换为另一种格式

mysql - 将用户信息与消息表连接起来

mysql - SQL 未按预期工作

sql - 从 Azure SQL InlineSqlTask​​ 任务创建输出变量 azure devops

sql-server - 为什么批量插入的错误文件不起作用?

java - 单连接中的多条语句

c# - 从 Byte[] 到 unix 时间戳(以毫秒为单位)