SSIS Преобразование пустого столбца даты и времени в NULL и анализ ввода - PullRequest
3 голосов
/ 13 марта 2019

У меня есть следующий простой пакет служб SSIS для обработки файла с разделителями-запятыми:

enter image description here

У меня проблемы со столбцами даты, в частности MoveInDate у которого входной столбец содержит данные в формате '20090731000000'.

Он входит в столбец базы данных MoveInDt, который имеет тип данных Datetime, и данные заканчиваются в формате:

'2009-07-31 00:00:00.000'

В SSIS я указал столбец ввода как DT_DBTIMESTAMP.Я не могу понять, как сделать простое «если MoveInDate пустое, загрузить ноль, иначе изменить данные на« ГГГГ-ММ-ДД 00: 00: 00.000 »

Сейчас я не могу дажекажется, выяснить, как загрузить жестко закодированную дату

Это не удается

Derived Column

Как и

"2019-01-01"

Или

(DT_DBTIMESTAMP)"2019-01-01"
(DT_DBTIMESTAMP)(DT_DATE)"2019-01-01"

Ошибка: 0xC02020A1 в задаче потока данных, источник плоского файла [11]: сбой преобразования данных.Преобразование данных для столбца «Дата перемещения» вернуло значение состояния 2 и текст состояния «Значение не удалось преобразовать из-за потенциальной потери данных.».
Ошибка: 0xC0209029 в задаче потока данных, источник плоского файла [11]:

Просматривая это сообщение, я обнаружил сообщения о типах данных, которые не совпадают в столбце ввода-вывода, но просматривают его ...

Проверка плоского файлавходной столбец, он определяется как DT_DBTIMESTAMP

enter image description here

И целевой столбец также определяется как DT_DBTIMESTAMP при просмотре входных выходных свойств.

enter image description here

Я рассмотрел много вопросов здесь и в других местах и ​​попытался сократить ввод до одной простой строки во входном файле.Я пытался воссоздать пакет несколько раз.

1 Ответ

2 голосов
/ 13 марта 2019

Если данные хранятся в следующем формате в плоском файле

20090731000000

Затем оставьте тип данных исходного столбца как DT_STR и добавьте поле с полем.столбец со следующим выражением:

(ISNULL([MoveInDate]) || [MoveInDate] == "") ? NULL(DT_DBTIMESTAMP) : 
    (DT_DBTIMESTAMP)(LEFT([MoveInDate],4) + "-" + 
                     SUBSTRING([MoveInDate],5,2) + "-" + 
                     SUBSTRING([MoveInDate],7,2) + " " + 
                     SUBSTRING([MoveInDate],9,2) + ":" + 
                     SUBSTRING([MoveInDate],11,2) + ":" + 
                     SUBSTRING([MoveInDate],13,2) )

Если данные хранятся в следующем формате:

2009-07-31 00: 00: 00

Используйте следующее выражение:

(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)[MoveInDate]

Если данные хранятся в следующем формате:

2009-07-31

Используйтеследующее выражение:

(ISNULL([MoveInDate]) || [MoveInDate] == "") 
         ? NULL(DT_DBTIMESTAMP) 
         : (DT_DBTIMESTAMP)([MoveInDate] + " 00:00:00")
...