首页 > 解决方案 > 如何使用 OCONV 减去日期

问题描述

背景:我负责使用 datastage 创建数据库提取。我们拥有超过 5 年的 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

解决方案


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 构造中以处理其他月份。


推荐阅读