我正在尝试在 Postgres 中创建一个表,该表存储在接下来的几年中每天每整小时发生一次的事件。所以我使用以下表达式填充了一个列:
INSERT INTO tablename(time)
SELECT CAST('2013-01-01' AS DATE) + (n || ' hour')::INTERVAL
FROM generate_series(0, 100000) n;
作为本专栏的数据类型,我选择了带时区的时间戳,并希望通过这种方式自动考虑夏令时。(顺便说一句,我的默认时区是 CET,所以适用 DST 时是 UTC+1 或 UTC+2)。作为上述查询的结果,我得到了这个:
- 2013-03-31 00:00:00 +01
- 2013-03-31 01:00:00 +01
- 2013-03-31 03:00:00 +02
- 2013-03-31 03:00:00 +02
- 2013-03-31 04:00:00 +02
- ...
- 2013-10-27 00:00:00 +02
- 2013-10-27 01:00:00 +02
- 2013-10-27 02:00:00 +01
- 2013-10-27 03:00:00 +01
- 2013-10-27 04:00:00 +01
- ...
UTC 的偏移量发生了变化,我预计 02:00 会在 3 月 31 日被忽略,因为这一天只有 23 小时,但我不知道为什么 03:00 有两次,而 10 月 27 日的 02:00 只有一次而不是两次,因为这一天有 25 小时。我想要实现的是,在 3 月 2 点的特定日期的所有年份都不会被跳过(我宁愿输入 'na' 或相应的值),并且 3'oclock 有两个条目在 10 月的特定日期(但不是 3 月),这样我将获得以下形式的列(其中 1 代表 00:00-1:00 的小时,2 代表 1:00-2:00 , ETC。):
- 2013-03-31 1 +01
- 2013-03-31 2 +01
- 2013-03-31 3 +02
- 2013-03-31 4 +02
- 2013-03-31 5 +02
- ...
- 2013-10-27 1 +02
- 2013-10-27 2 +02
- 2013-10-27 3A +02
- 2013-10-27 3B +01
- 2013-10-27 4 +01
- 2013-10-27 5 +01
- ...
有人知道如何去做吗?我做错了什么吗?只是格式的问题吗?我必须写一个函数吗?任何帮助,将不胜感激。谢谢你。