问题描述
我知道标题可能令人困惑,但是我想尽可能多地了解它。
我使用链接服务器连接将数据从Oracle生产数据库提取到报表数据库中(现在不讨论该方法的有效性-它是继承的)。
我可以跑步:
execute ('select sysdate from dual') at XXX;
与之匹配
select getdate()
但是:
execute ('select max(dstamp) from transaction_table') at XXX;
现在返回一个小时的时间。
在夏季(BST)期间一切正常,但是回到GMT的那一刻我们要花一个小时。
我确定我已经读过sql Server没有与sessiontimezone等效的功能,或其他可能有助于偏移量来抵消“问题”的功能,但是可以提供任何帮助。
这不是我们第一次遇到这个问题,旧的解决方案是通过一个函数手动向每个datetime字段添加一个小时,然后在开关处停止添加。是的,不理想,但是当时可以正常工作,我们上次无法解决。
sql服务器是在4月(我认为是4月)重建的,时区设置为GMT标准时间。 如果有人可以帮助您并且需要更多信息来诊断/开发解决方案,请给我电话。
非常感谢
解决方法
因此,这与SQL Server系统时间和Oracle Server系统时间之间的差异有关。 SYSDATE
从运行它的系统(SQL Server服务器)中提取日期。另一方面,CURRENT_DATE
在Oracle服务器上运行。我们可以利用这个优势。因此,我将您的查询更改为以下内容:
SELECT MAX(dstamp)+(CURRENT_DATE-SYSDATE)
FROM transaction_table;
这将使MAX
结果移位,以说明服务器时间的差异。