如何使用OCONV减去日期

问题描述 投票:0回答:2

背景:我负责使用datastage创建数据库提取。我们有超过五年的CreatedDt数据(日期数据类型)。在导出查询中,我需要为CreatedDt添加BETWEEN子句。由于数据存储作业是通用化和参数化的,因此我需要在序列中计算日期。

例如: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,但这远远超过我的目标点几年。

我需要知道如何在给定日期执行我需要的操作。或者,如果有另一种方式,我不仅仅是开放的。

谢谢

datastage
2个回答
0
投票

因为数据存储作业是通用化和参数化的

并不意味着您无法在数据库中计算开始日期和结束日期,而是从那里选择它。数据库通常提供许多功能来执行此日期计算,使事情变得更加容易。您可以运行SELECT selectng开始和结束日期并将其写入文件。在序列中,您可以读取该文件并将其作为参数提供给作业。

如果你坚持你的数据基本计算,我想这将是很多步骤。您可以在具有IF THEN ELSE逻辑的变压器中手动执行月计算。其中一个callenges是获取结束日期(开始日期将始终为1.)但DaysInMonth函数可以帮助您。 DateFromComponents可以帮助您重新组合日期。


0
投票

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]“)

此结束日期计算适用于1月至8月。调整年份和月份数学并包装在If..Then..Else构造中以处理其他月份。

© www.soinside.com 2019 - 2024. All rights reserved.