Просто переверните fromdt = Row.SampleDate
до
Row.SampleDate = fromdt
И ваш сценарий должен работать, но см. Ниже, чтобы упростить некоторые, если хотите.
КАК СДЕЛАТЬ ЭТО БЕЗ SCRIPT --see ниже метода сценария
Вы можете сделать это намного проще для себя, если вы используете Derived Column
преобразование вместо этого! Преобразование преобразования данных не работает, поскольку оно не позволяет вам манипулировать значением столбца, а скорее только типом данных. Но в выведенном столбце вы можете вырезать строку и передать результат в качестве даты.
Таким образом, источник в производный столбец в пункт назначения в потоке данных.
В производном столбце ваш добавить новый столбец и использовать следующее как выражение (заменяющего DateString
с name of your column
, содержащей дату в формате ddMMyyyy
)
затем использовать это как Expression
:
(DT_DATE)(SUBSTRING(DateString,3,2) + "/" + (LEFT(DateString,2) + "/" + RIGHT(DateString,4)))
(dt_date)
может быть переключен на другой формат даты, если вы хотите, и этот тип будет автоматическим lly установить Data Type
на Derived Column
. Затем на вашей карте destination
введите new derived column
в destination column
вместо оригинальной колонки с source
.
Вот именно ваши сделали, нет сценариев.
КАК СДЕЛАТЬ ЭТО скрипт
Для решения маршрута, если вы хотите, чтобы остаться со сценарием и, возможно, придать некоторую дополнительную логику, а не простое преобразования вы можете сделать это через transformation
script component
в вашем data flow task
. Это произойдет из трансформации derived column
выше, но по существу будет делать то же самое только через скрипт. Я делаю шаги здесь, я предполагаю, что вы уже знаете некоторые из них, если кто-то еще споткнется на эту должность.
- Добавьте компонент сценария, когда вы выбираете «преобразование» и соединить его с вы источник
компонент
- Open Script и перейдите в раздел «
Inputs and Outputs
» и добавить вывод провести новый столбец и установите тип данных , Новый столбец необходим, потому что вы изменяете типы данных
- перейти в раздел "
Input Columns
" и выберите SampleDate
колонку
- вернуться "
Script
" и выберите Vi sual Basic как ваш язык скриптов.
- Нажмите «Редактировать сценарий», чтобы начать кодирование.
- Прокрутите страницу вниз, пока не найдете sub
Input0_ProcessInputRow(ByVal Row...
, где вы поместите свой код.
Этот код работает:
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.SampleDate_IsNull Then
Row.DerivedDate = DateTime.ParseExact(Row.SampleDate, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture)
End If
End Sub
Как @Shiva в комментариях предложил вы могли бы расширить это и использовать TryParseExact или обернуть его в попытке поймать блок, так что если разбор даты не удается, то будет просто очистить/удалите значение из записи, и импорт будет продолжен. Я оставляю это до вас, так как обработка неверных данных - это скорее вопрос требований бизнеса.
Вы должны действительно проверить, что ответ еще не предоставлен, прежде чем задать новый вопрос: http://stackoverflow.com/questions/21833719/convert-flatfile-column-to-datetime – BIDeveloper
Уважаемый BIDeveloper, если вы считаете, что ответ уже есть, дайте мне знать. Поверьте мне, я все пробовал, но мой код VB не конвертирует формат DDMMYYYY в формат YYYY-MM-DD HH: MM: SS. –
Хотя я не сомневаюсь, что вопрос о том, как преобразовать строку (из плоского/текстового файла) в переменную типа (sub) типа Date, задан раньше, ответ «использовать преобразование с вашего SQL-сервера» неверен , –