背景:我负责使用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,但这远远超过我的目标点几年。
我需要知道如何在给定日期执行我需要的操作。或者,如果有另一种方式,我不仅仅是开放的。
谢谢
因为数据存储作业是通用化和参数化的
并不意味着您无法在数据库中计算开始日期和结束日期,而是从那里选择它。数据库通常提供许多功能来执行此日期计算,使事情变得更加容易。您可以运行SELECT selectng开始和结束日期并将其写入文件。在序列中,您可以读取该文件并将其作为参数提供给作业。
如果你坚持你的数据基本计算,我想这将是很多步骤。您可以在具有IF THEN ELSE逻辑的变压器中手动执行月计算。其中一个callenges是获取结束日期(开始日期将始终为1.)但DaysInMonth函数可以帮助您。 DateFromComponents可以帮助您重新组合日期。
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构造中以处理其他月份。