Как вычесть даты с помощью OCONV - PullRequest
0 голосов
/ 23 февраля 2019

Справочная информация: я отвечаю за создание экстрактов базы данных с использованием данных.У нас есть данные за пять лет с CreatedDt (тип данных даты).В запросе на экспорт мне нужно добавить предложение BETWEEN для CreatedDt.Поскольку задание обработки данных обобщено и параметризовано, мне нужно рассчитать даты в последовательности.

Например: Select * from tableA where CreatedDt BETWEEN <<start Date>> and <<End Date>>

Для одного из этих запросов мне нужно вернуться назад на четыремесяцев и получить 3 месяца данных (пропуская предыдущий месяц сейчас).Например:

Предполагая сегодняшнюю дату: 02/22/2019

Мне нужно:

Start Date: 10/01/2018
End Date: 12/31/2018

(в основном, пропустить месяц назад и перейти на три месяца)

Я знаю, это означает, что используются следующие расчеты:

  • Вычесть из "Сегодня" (дважды)
  • Перейти к началу месяца (для даты начала)
  • Перейти к последнему дню месяца (для даты окончания)

Я работаю с этой формулой:

OConv(Iconv(Date(),"D/YMD[4,2,2]") + 1), "D/YMD[4,2,2]")

Из того, что я понимаю '+1'представляет сложение / вычитание по дням.используя ранее упомянутую проблему вычисления.

Я пытался:

OConv(Iconv(Date(),"D/YM[4,2]") + 1), "D/YMD[4,2,2]")

Думая, что я был +1 в месяц, но это закончилось годами далеко от моей целевой точки.

Мне нужно знать, как выполнять нужные мне операции в определенный день.Или, если есть другой способ, я более чем открыт.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

StartDate Oconv (Date () - 2, "D-YM [4,2]"): "-01"

EndDate Oconv (Iconv ((Oconv (Date (), "DY"): "-": Oconv (Date (), "DM") + 4: "-01") - 1, "DYMD"), "D-YMD [4,2,2]")

Этот расчет даты окончания работает для января-августа.Отрегулируйте математические вычисления для года и месяца и используйте конструкцию If..Then..Else для обработки других месяцев.

0 голосов
/ 25 февраля 2019

Поскольку задание обработки данных обобщено и параметризовано

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

Если вы придерживаетесь базового расчета данных, я думаю, это будет много шагов.Вы можете выполнить расчет месяца вручную в трансформаторе с помощью логики IF THEN ELSE.Одним из вызовов является получение даты окончания (дата начала всегда будет 1.), но функция DaysInMonth может помочь вам.DateFromComponents может помочь вам собрать даты.

...