将日期范围拆分为具有开始日期和结束日期的范围内的每一天

Split date range into each day within the range with start and end date

我有一个场景,其中具有日期范围的行必须针对该日期范围内的所有日期拆分为多行。有谁知道如何在 Informatica powercenter 的这种情况下获取目标(如附件)?

来源

code        start date            end date
ADMISSION   01/01/2017 02:05:11   01/01/2017 04:20:53
TRANSFER    01/01/2017 04:20:54   01/03/2017 18:30:48
DISCHARGE   01/03/2017 18:30:49   01/03/2017 20:18:11

目标

code        start date            end date
ADMISSION   01/01/2017 02:05:11   01/01/2017 04:20:53
TRANSFER    01/01/2017 04:20:54   01/01/2017 11:59:59
TRANSFER    01/02/2017 00:00:00   01/02/2017 11:59:59
TRANSFER    01/03/2017 00:00:00   01/03/2017 18:30:48
DISCHARGE   01/03/2017 18:30:49   01/03/2017 20:18:11

提前致谢!

请尝试java转换! 找出开始日期和结束日期之间的差异, 在 java 转换中使用 rowgen 创建新记录。 希望这能回答您的问题。

最简单的方法是根据日期记录的天数大于或等于开始日期的天数,根据每个记录(sql 加入源限定符)拥有 table 个日期天并且小于或等于结束日期的天。然后在映射中稍后添加额外的逻辑以从开始时间字段中选择开始时间 wben 天数是相同的,否则从日期table开始时间和结束时间相似

PowerCenter 不支持行乘法。因此需要一个解决方法。计算日期差异并使用它来乘以行。选项是:

  • 使用 Java 转换生成额外的行(here's an example
  • 使用 [1,2,2,3,3,3,...] 等数据创建一个虚拟 table 并使用它加入日期差异。请记住行数增长很快,不建议大量使用
  • 创建活动的、非缓存的查找,这将为给定的输入 return 适当的行数。使用 SQL 查询覆盖为每个已处理的行获取所需的行数*

*假设您使用 myNumber 列类型 bigint 创建一个 myNumbers table 并使用从 1 到 X 的序列填充一次,您可以使用以下查询来覆盖查找:SELECT 1 FROM myNumbers WHERE myNumber = ?in_lookup_port_name?。使用值为 1 的虚拟端口作为条件。