小编典典

带有夏时制的时间戳计算

sql

中欧夏令时开始于三月的最后一个星期日。我们将时钟设置为02:00到03:00。如果我在数据库请求中进行时间戳计算会发生什么?比方说,在01:59?

UPDATE sessions SET aliveuntil = (CURRENT_TIMESTAMP + INTERVAL '1' MINUTE) WHERE id = ?

结果是03:00还是02:00?

如果我们将时钟设置为03:00到02:00,那结束了呢?

SELECT id FROM sessions WHERE aliveuntil < (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)

时间从03:00更改为02:00之后…(CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)在02:00会发生什么?是02:59还是01:59?

应该如何处理?最佳实践以及Oracle Database 11g 11.2.0.2.0版如何处理(在我的特定情况下)?


阅读 257

收藏
2021-04-22

共1个答案

小编典典

如果我正确地理解了他们的文档,则取决于如何在数据库中设置表/列。如果将这些列设置为使用WITH TIME
ZONE,则Oracle自动确定正确/相关的值。在上面的示例中,如果aliveuntil列具有此设置,那么如果您尝试在1:59处添加1分钟,则时间将更新为3:00。

这是我找到的有关该主题的有用文章:

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm

向下滚动到文章底部,您应该看到所要查找的内容。

这是我发现相关的文章部分:

例如,在美国东部地区,夏令时生效时,时间从01:59:59 am更改为3:00:00 am。02:00:00和02:59:59
am之间的时间间隔不存在。该时间间隔中的值无效。

2021-04-22