【问题标题】:Postgresql using date interval and SELECT statementPostgresql 使用日期间隔和 SELECT 语句
【发布时间】:2015-04-20 20:34:26
【问题描述】:

我有一个包含 3 列的表 - 时间戳、实数和字符串。字符串列包含各种时间频率值(如分钟、小时、天)。我想获取我的时间戳列中的值并将其他列中的值添加到其中。例如,我想做类似

的事情
select timestamp '2015-04-20 01:00' + interval '2 hours'

如果我有一个包含以下列和值的表格

action_start_time   rate  frequency
2015-04-20 01:00    2     hours

【问题讨论】:

    标签: sql postgresql intervals


    【解决方案1】:

    您可以使用以下查询将ratefrequency 列转换为间隔

    select format('%s %s',rate,frequency)::interval
    from actions 
    

    然后只需将间隔与action_start_time 相加即可获得确切的时间戳column

    select action_start_time + format('%s %s',rate,frequency)::interval my_timestamp
    from actions 
    

    demo-sqlfiddle

    【讨论】:

    • 这里提供了所有不错的选择。谢谢。我选择了这个选项,因为它似乎很简单。
    【解决方案2】:

    简单地说:

    SELECT action_start_time + rate * ('1'|| frequency)::interval
    

    所有技巧都在于使用某个区间值的乘法:

    postgres=# select 3 * interval '1 hour';
    ┌──────────┐
    │ ?column? │
    ╞══════════╡
    │ 03:00:00 │
    └──────────┘
    (1 row)
    

    您可以简单地创建任何间隔值,而无需使用字符串进行操作。当然,如果您的列 frequency 是原生 PostgreSQL interval 类型,应该会更好。

    【讨论】:

      【解决方案3】:
      select action_start_time + (rate::varchar||' '||frequency)::interval
      

      从 action_start_time 开始,然后取速率(转换为字符)并附加一个空格,然后是频率,以实现类似“1 小时”或“3 天”等字符串。然后将该字符串转换为一个间隔,然后将其添加到原来的 action_start_time

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 2015-01-23
        • 1970-01-01
        • 2011-03-16
        相关资源
        最近更新 更多