Oracle 到 SQL 服务器通过链接服务器。从 BST 切换到 GMT 后,带有本地时区字段的时间戳现在会偏移。最好的调整方法?

Oracle to SQL Server via linked server. timestamp with local time zone fields now offset after switch from BST to GMT. Best way to adjust it back?

我知道标题可能令人困惑,但我想尽可能详细地了解它。

我使用链接服务器连接将数据从 Oracle 生产数据库提取到报告数据库中(我们现在不讨论该方法的有效性 - 它是继承的)。

我可以 运行:

execute ('select sysdate from dual') at XXX;

匹配

select getdate()

但是:

execute ('select max(dstamp) from transaction_table') at XXX;

returns比现在提前一小时。

在夏季 (BST) 期间一切正常,但当我们切换回 GMT 时,我们已经过了一个小时。

我确定我已经读到 SQL 服务器没有与 sessiontimezone 或其他可能有助于偏移来扭转“问题”的功能等效的功能,但我们将不胜感激。

这不是我们第一次遇到这个问题,旧的解决方案是通过函数手动向每个日期时间字段添加一个小时,然后在开关处停止添加。是的,不是很理想,但是当时有效,我们上次没能解决。

SQL 服务器在四月份重建(我认为是四月份),时区设置为 GMT 标准时间。 如果有人可以提供帮助并需要更多信息来 diagnose/develop 解决方案,请给我留言。

非常感谢

所以这与您 SQL 服务器系统时间和您的 Oracle 服务器系统时间之间的差异有关。 SYSDATE 从系统中提取日期 运行(SQL 服务器服务器)。 CURRENT_DATE 另一方面,Oracle 服务器时间 运行s。我们可以利用这一点。所以我会将您的查询更改为以下内容:

SELECT MAX(dstamp)+(CURRENT_DATE-SYSDATE)
FROM transaction_table;

这将改变 MAX 结果以解决服务器时间的差异。