2013-12-06 7 views
0

Я пытаюсь преобразовать числовой столбец со следующим определенным форматом: DDMMYYYY в datetime в базе данных mssql.SSIS Преобразование numeric в datetime

Что я пытался сделать с помощью «столбца вывода».

Моя идея состояла в том, чтобы получить год, месяц и день часть в виде строк, объединить их и конвертировать их в DT_DBTIMESTAMP со следующим кодом:

(DT_DBTIMESTAMP)(SUBSTRING((DT_WSTR,8)[field],5,4) + "-" + SUBSTRING((DT_WSTR,8)[field],3,2) + "-" + SUBSTRING((DT_WSTR,8)[field],1,2)) 

Я также пытался сделать это с DT_DBDATE но Бесполезный Не работай.

Столбец моей таблицы выглядит следующим образом: [GebDat] datetime

У вас есть какие-либо идеи, как я могу добиться этого результата? Или, может быть, дайте мне подсказку, что я делал неправильно в вышеупомянутом подходе?

Заранее спасибо

+0

Что делает вывод вашего преобразования выглядят? И ваша база данных ожидает, что дата будет YYYY-MM-DD? – Andrew

+0

Эй, Эндрю. Я не совсем уверен, что вы подразумеваете под выводом .. В окнах прогресса я получаю следующее сообщение: '[Родственные генерации столбцов [397]] Ошибка: при попытке выполнить литье типов произошла ошибка.' cast-error возникает при нажатии на (DT_DBTIMESTAMP), поэтому приведение в поле DT_WSTR работает ... И да, база данных ожидает, что дата будет YYYY-MM-DD – xeraphim

+1

Получаете ли вы ту же ошибку при преобразовании в ' DT_DBDATE'? Полагаю, у вас есть некоторые значения, которые нельзя правильно преобразовать в дату. – Andrew

ответ

1

Код в моем первоначальном вопросе был фактически правильным.

Но то, что Эндрю предложил, что есть некоторые ценности, которые невозможно преобразовать правильно, абсолютно прав. У нас были некоторые значения, которые не соответствовали спецификации (например, числовое значение 4012012 вместо 04012012, что привело к тому, что SSIS попытался преобразовать 40-12-012 в дату, что явно не сработало.

Что я ' m теперь делать, чтобы сначала проверить длину входного параметра. Если это 8, тогда сделайте точно код в вопросе, если он равен 7, затем добавьте 0 к дню и получите соответственно день, месяц, год:

LEN((DT_WSTR,8)[field]) == 7 ? (DT_DBTIMESTAMP)(SUBSTRING((DT_WSTR,8)[field],4,4) + "-" + SUBSTRING((DT_WSTR,8)[field],2,2) + "-0" + SUBSTRING((DT_WSTR,8)[field],1,1)) : (DT_DBTIMESTAMP)(SUBSTRING((DT_WSTR,8)[field],5,4) + "-" + SUBSTRING((DT_WSTR,8)[field],3,2) + "-" + SUBSTRING((DT_WSTR,8)[field],1,2))

Спасибо Андрей, за подсказку! Он поведет меня по правильному пути :-)

Смежные вопросы