Есть ли какой-то фрагмент кода, работающий так же, как add_month в oracle? - PullRequest
0 голосов
/ 14 июня 2019

Oracle add_months функция вернет последний день месяца, если вы передадите ей последний день месяца. Но в python, насколько я знаю, lativedelta не могу вернуть последний день месяца.

Я не могу импортировать 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 голосов
/ 14 июня 2019

Два разных ответа:

  1. Установите функции совместимости с Oracle в Greenplum.

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

И тогда вы можете использовать функцию add_months () в Oracle, как вы это делали в Oracle.

Вы можете использовать интервальный тип данных для добавления месяца.

your_date_field + interval '1 month'
0 голосов
/ 14 июня 2019

Вы можете добавить один день к начальному последнему дню месяца перед вычитанием месяцев. Затем вы можете вычесть этот день, чтобы получить последний день предыдущего месяца.

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
...