是否有一些代码的行为与oracle中的add_month相同?

时间:2019-06-14 08:30:15

标签: python greenplum

如果您将一个月的最后一天传递给Oracle add_months函数,它将返回该月的最后一天。但是在python中,据我所知,relativedelta无法返回该月的最后一天。月。

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

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

from dateutil.relativedelta import relativedelta
from datetime import date

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

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

2 个答案:

答案 0 :(得分:0)

您可以在减去月份之前将一天添加到该月的初始最后一天。 然后您可以减去该天以获得上个月的最后一天。

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 :(得分:0)

两个不同的答案:

  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'