Другой формат даты для одного и того же столбца в Informatica IICS

Я получаю данные из остальных API в формате JSON и имею сценарий, в котором столбец может иметь несколько форматов даты. Текущий формат даты может быть либо 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'))

Но когда я попробовал это с миллисекундами, используя выражение ниже:

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 для объединения нескольких похожих столбцов.


person Sandeep Singh    schedule 03.04.2021    source источник


Ответы (1)


Почему бы вам не проверить оба варианта - с миллисекундами и без них? Вы можете использовать условие ниже 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')
))
)
person Koushik Roy    schedule 03.04.2021
comment
Заданная дата была строкой в ​​​​Json, и я перезаписываю сопоставление с типом данных даты/времени. Я тоже получаю ошибку парсера. Я попробовал этот 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')) , который работает, и я ищу что-то похожее, которое может определить тип и записать вывод. - person Sandeep Singh; 05.04.2021
comment
это не удастся, если у вас какой-то странный формат даты. если вы добавите проверку is_date, она должна работать для всех входов. В чем ошибка при использовании этого 'MM/DD/YYYY HH24:MI:SS.MS'? - person Koushik Roy; 05.04.2021