将所有选定列转换为__char

ald*_*ado 5 sql oracle pentaho kettle to-date

我在外部程序(Pentaho Data Integration(PDI))中使用oracle SQL查询.在继续使用它们之前,我需要将所有列转换为字符串值.

我正在寻找的是自动应用的东西

select to_date(col1), to_date(col2),..., to_date(colN) from example_table; 
Run Code Online (Sandbox Code Playgroud)

到所有列,以便您最多可以包装此语句:

select * from example_table;
Run Code Online (Sandbox Code Playgroud)

并自动转换所有列.

解释:我需要这个,因为PDI在获取未发布的DATE列时似乎不能正常工作.由于我有动态查询,我不知道是否存在DATE列,只是想将所有列转换为字符串.

编辑

由于查询各不相同,因为我有一个很长的列表作为输入,我正在寻找一种更通用的方法,而不仅仅是手动编写每列的to_char().

Ris*_*shu 3

如果您正在寻找 PDI 中的解决方案,则需要创建一个作业 (.kjb),在其中进行 2 次转换。第一个 .ktr将重建查询,第二个 .ktr将执行新查询。

1. 第一次转换:重建查询

在此输入图像描述

  • 阅读源表步骤中的列(在您的情况下使用表输入步骤)。编写查询select * from example_table;并将行限制为 0 或 1。这里的想法不是获取所有行,而是重新创建查询。
  • 使用Meta Structure Step 获取表的元结构。它会为您获取来自上一个的列的列表。步。
  • 在修改 JavaScript 步骤中,使用一小段代码检查列的数据类型是否为Date,然后将to_Char(column)连接到行。
  • 最后将变量分组并设置为变量。

此时将自动为您重新创建字段。现在,下一步是使用新查询执行该字段。

2. 第二次转换:在下一步中使用这个设置的变量来得到结果。${NWFIELDNAME}是您在上述转换中使用修改后的列设置的变量。

在此输入图像描述

希望这可以帮助 :)

我已将第一个 ktr 的代码放在gist 中