【问题标题】:Inserting multiple dates in PostgreSQL在 PostgreSQL 中插入多个日期
【发布时间】:2020-08-18 02:45:41
【问题描述】:

您好,请问是否可以输入从 01-01-2020 到 04-15-2020 的日期。 目前,我有这段代码可以迭代或每天从 00:00:00 到 23:00:00 循环。

    INSERT INTO dashboard.availability(terminal_id, availability_date, availability_time)
    select td.terminal_id, td.down_date, (hh * interval '1 hour')::time
     from (select distinct terminal_id, down_date
      from dashboard.down_event
     ) td cross join
     generate_series(0, 23) gs(hh);

但是我也可以对每天循环的日期执行相同的操作,直到日期达到 2020-04-15?

例如:

terminal_id            availability_time     availability_date
   _____________     ___________________   _____________________
    012345678             00:00:00             2020-01-01
    012345678             01:00:00             2020-01-01
    012345678             02:00:00             2020-01-01
    012345678             03:00:00             2020-01-01
.
.
.  
   012345678             00:00:00               2020-04-15

【问题讨论】:

    标签: sql postgresql date select sql-insert


    【解决方案1】:

    为什么不在整个时间段内按小时迭代?

    select td.terminal_id, gs.down_date
    from (select distinct terminal_id
          from dashboard.down_event
         ) td cross join
         generate_series('2020-01-01'::timestamp, '2020-04-15'::timestamp, interval '1 hour) gs(down_date);
    

    【讨论】:

    • 时间怎么样?上面的查询只得到 2 列。但我需要插入 3 个选择
    • @ElijahLeis。 . .第二列有日期和时间。这似乎是一个特性,而不是一个错误,但您可以明显地从中提取日期和时间值。
    【解决方案2】:

    这是你想要的吗?

    insert into dashboard.availability(terminal_id, availability_date, availability_time)
    select t.terminal_id, x.ts::date, x.ts::time
    from (select distinct terminal_id from dashboard.down_event) t
    cross join generate_series(date '2020-01-01', date '2020-04-15', interval '1 hour') x(ts)
    

    对于表 dashboard.down_event 中的每个 terminal_id,这会在 1 月 1 日到 4 月 15 日之间每小时生成一行。结果被插入到目标表中,同时将日期和时间组件保存在单独的列中。

    旁注:将时间戳的数据和时间组件存储在不同的列中通常不是一个好主意;当您实际需要访问时间戳值时(迟早会发生这种情况),它会使事情变得更复杂且效率更低。

    【讨论】:

    • 谢谢!在您的旁注中注明!
    • 嗨!我查看了“2020-04-15”的日期,它只适用于 00:00:00 而不是 23:00:00
    • @ElijahLeis:对,所以:generate_series(date '2020-01-01', date '2020-04-16', interval '1 hour')。
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2023-03-29
    • 2020-08-16
    • 2014-10-24
    相关资源
    最近更新 更多