0

我正在从 JSON 格式的 rest API 获取数据,并且有一个列可以有多种日期格式的场景。当前的日期格式可以是2011-02-12T01:00:00或者2020-04-15T20:44:57.38也可以是null或者其他的。

我想通过表达式解析它并尝试捕获完整的日期字符串。以下表达式似乎工作正常,但它截断了毫秒部分并将值返回到秒。

iif(isnull(%date_fields%),'\N',
to_char(To_date(to_char(%date_fields%),'MM/DD/YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'))

但是当我用毫秒 usinf 下面的表达式尝试它时:

iif(isnull(%date_fields%),'\N',
to_char(To_date(to_char(%date_fields%),'MM/DD/YYYY HH24:MI:SS.MS'),'YYYY-MM-DD HH24:MI:SS.MS'))

它抛出错误:

TT_11132 Transformation [Expression3] had an error evaluating output column [JobStartDate_out]. 
Error message is [<<Expression Error>> [TO_DATE]: invalid string for converting to Date 
... t:TO_DATE(u:TO_CHAR(t:<02/12/2011 01:00:00>,u:'MM/DD/YYYY HH24:MI:SS'),u:'MM/DD/YYYY HH24:MI:SS.MS')]. 

我使用以下搜索了几个选项,但出现解析错误。

DECODE (TRUE,
iff(isnull(%date_milli%),
'\N',
is_date(To_date(to_char(%date_milli%),'MM/DD/YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'),
is_date(To_date(to_char(%date_milli%),'MM/DD/YYYY HH24:MI:SS.MS'),'YYYY-MM-DD HH24:MI:SS.MS'),
ERROR('NOT A VALID DATE')))

在 Informatica 中处理多日期格式的可能解决方案是什么?这里 JSON 日期格式是字符串,我将其映射到日期/时间类型并使用输出 Marco 字段将多个相似的列组合在一起。

4

1 回答 1

0

你为什么不检查这两个选项 - 有和没有毫秒?您可以使用以下iif条件。我也觉得你的表达有问题。我假设 date_milli 是一种字符类型。如果它是一个日期,那么您可以相应地更改以下表达式。

iff(isnull(%date_milli%),null,
iif( is_date(to_char(%date_milli%),'MM/DD/YYYY HH24:MI:SS'), to_date(to_char(%date_milli%),'MM/DD/YYYY HH24:MI:SS'),
iif( is_date(to_char(%date_milli%),'MM/DD/YYYY HH24:MI:SS.MS'), to_date(to_char(%date_milli%),'MM/DD/YYYY HH24:MI:SS.MS')
))
)
于 2021-04-03T18:48:21.627 回答