是否有一些代码的作用与 Oracle 中的“add_month”相同?

Is there some piece of code acting the same way as `add_month` do in oracle?

Oracle add_months function will return the last day of month if you pass the last day of month to it.But in python ,as far as I have known,relativedelta 不能 return 月份的最后一天。

我无法导入MonthDelta,我不知道它是否有效。

例如add_months(to_date('20190430','yyyymmdd'),-6) returns '20181031',

from dateutil.relativedelta import relativedelta
from datetime import date

date(2019,4,30) - relativedelta(months=6)
# returns 20181030

我想知道在 python 或 greenplum 中是否有一些功能与 add_month 完全一样。

在减去月份之前,您可以在该月的最初最后一天加上一天。 然后你可以减去那一天得到上个月的最后一天。

import datetime
import dateutil.relativedelta

my_date = datetime.date(2019,4,30)

date_six_months_ago = my_date + datetime.timedelta(days=1) - dateutil.relativedelta.relativedelta(months=6) - datetime.timedelta(days=1)
print(date_six_months_ago)

输出:

2019-10-31

一步一步:

2019-04-30 + 1 day = 2019-05-01

2019-05-01 - 6 months = 2018-11-01

2018-11-01 - 1 day = 2018-10-31

两个不同的答案:

  1. 在 Greenplum 中安装 Oracle 兼容性功能。

    psql -f /usr/local/greenplum-db/share/postgresql/contrib/orafunc.sql
    

然后您可以像在 Oracle 中一样在 Oracle 中使用 add_months() 函数。

  1. 您可以使用间隔数据类型来添加月份。

    your_date_field + interval '1 month'