【问题标题】:Calculating a date in Postgres by adding months?通过添加月份来计算 Postgres 中的日期?
【发布时间】:2011-08-20 01:02:39
【问题描述】:

我有一个包含以下字段的 postgres 表

开始日期,持续时间

duration 包含任意数量的月份,因此要计算结束日期,请将 duration 中的月份添加到开始日期。现在我想用 postgres 查询做这样的事情。

SELECT * 
FROM table 
WHERE start_date > '2010-05-12' 
AND (start_date + duration) < '2010-05-12'

这可能吗?如何正确使用语法?

我的postgres的版本是PostgreSQL 8.1.22 on x86_64-redhat-linux-gnu,由GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)编译

【问题讨论】:

  • 8.1 ?你真的应该升级!如果 "duration" 是 INTERVAL 类型,那么它会起作用,如果它是整数个月,你必须执行 "duration * '1 MONTH'::INTERVAL"。
  • @pefeu:你应该这样回答。
  • @peufeu - 8.1 是默认版本 on RHEL5。它是稳定的,在at least 2014 之前将得到 Red Hat 的支持。在某些情况下,这比拥有最新版本更重要。

标签: postgresql


【解决方案1】:

您可能会发现这篇文章很有用:PostgreSQL: month := interval '30 days';

还有这个链接:http://wiki.postgresql.org/wiki/Working_with_Dates_and_Times_in_PostgreSQL,更具体地说,是名为“使用 DATETIME、DATE 和 INTERVAL VALUES”的部分。

【讨论】:

    【解决方案2】:

    尝试:

    (start_date + (duration * '1 month'::INTERVAL)) < '2010-05-12'
    

    (start_date + (duration || ' month')::INTERVAL) < '2010-05-12'
    

    更多信息:Date/Time Functions and Operators

    【讨论】:

    • = 出现语法错误:在字符 220 的“持续时间”处或附近出现语法错误
    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2023-01-29
    • 2020-01-21
    • 2022-01-02
    • 2021-05-17
    • 1970-01-01
    • 2016-07-21
    • 2015-06-20
    相关资源
    最近更新 更多