【发布时间】:2023-03-24 13:09:01
【问题描述】:
我有一组日期列(Int 和 Date/Time 格式),我想将每条记录中的日期范围划分为多个记录,每个记录一个记录:
一条记录的例子如下:
ID St_Dt_Int St_Dt_Date End_Dt_Int End_Dt_Date
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0
我正在使用 Java 转换将记录拆分为 n (13) 个月的 n (13) 条记录。但我无法为每条记录的每个月值创建两个新的日期列:
ID St_Dt_Int St_Dt_Date End_Dt_Int End_Dt_Date month_number n_months YYYY MM DD ext_MM ext_DD
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 0 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 1 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 2 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 3 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 4 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 5 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 6 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 7 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 8 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 9 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 10 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 11 12 1996 02 01 2 1
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 12 12 1996 02 01 2 1
我正在使用 Informatica BDM。我知道使用 Informatica 函数(例如 GET_DATE_PART() 和 ADD_TO_DATE() 等)执行此操作要容易得多,而且我确实做到了。但是当我的代码在下推期间转换为 Spark 代码时,会发生一个问题。所以,我想在Java转换本身中实现这两个月度列,同时将每条记录分成n条记录。
我的预期输出如下,其中包含两个新列,其中包含根据日期范围的每条记录的月份值:
ID St_Dt_Int St_Dt_Date End_Dt_Int End_Dt_Date month_number n_months YYYY MM DD ext_MM ext_DD Required_St_Date Required_End_Date
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 0 12 1996 02 01 2 1 19960201 19960229
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 1 12 1996 02 01 2 1 19960301 19960331
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 2 12 1996 02 01 2 1 19960401 19960430
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 3 12 1996 02 01 2 1 19960501 19960531
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 4 12 1996 02 01 2 1 19960601 19960630
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 5 12 1996 02 01 2 1 19960701 19960731
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 6 12 1996 02 01 2 1 19960801 19960831
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 7 12 1996 02 01 2 1 19960901 19960930
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 8 12 1996 02 01 2 1 19961001 19961031
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 9 12 1996 02 01 2 1 19961101 19961130
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 10 12 1996 02 01 2 1 19961201 19961231
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 11 12 1996 02 01 2 1 19970101 19970131
1234 19960201 1996-02-01 00:00:00.0 19970201 1997-02-01 00:00:00.0 12 12 1996 02 01 2 1 19970201 19970229
我目前在Java转换中的代码(我是第一次使用这个转换)如下:
以下是我的导入:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
我的 On Input 选项卡中用于创建 n 条记录的代码如下:
for (int i=0; i<=n_months; i++)
{
if (i == 24)
{
break;
}
o_ID = Id;
o_St_Dt_Int = St_Dt_Int;
o_St_Dt_Date = St_Dt_Date;
o_End_Dt_Int = End_Dt_Int;
o_End_Dt_Date = End_Dt_Date;
o_n_months = n_months;
o_month_number = i;
Date date = new Date(St_Dt_Date);
java.util.Calendar cal = Calendar.getInstance();
cal.setTime(date);
o_YYYY = cal.get(Calendar.YEAR);
ext_MM = cal.get(Calendar.MONTH) + 1;
ext_DD = cal.get(Calendar.DAY_OF_MONTH);
if (ext_MM < 10) {
o_MM = "0"+String.valueOf(ext_MM);
}
else {
o_MM = String.valueOf(ext_MM);
}
if (ext_DD < 10) {
o_DD = "0"+String.valueOf(ext_DD);
}
else {
o_DD = String.valueOf(ext_DD);
}
generateRow();
}
我对 Java 完全陌生,我无法理解如何创建两个新的日期列,每个记录的每个月值:有人可以帮我解决这个问题吗?这将是一个很大的帮助。
【问题讨论】:
标签: java informatica