Импорт долей секунды из Excel в SQL Server

#sql-server #excel #ssis

#sql-сервер #excel #ssis

Вопрос:

У меня есть рабочая книга Excel 2013 (XLSX), которая содержит даты с дробными секундами. Я пытаюсь импортировать это в SQL Server 2012, но, похоже, он всегда теряет доли секунды.

Вот таблица Excel, показывающая доли секунды:

2014-10-01 02:16:05.25 вечера

Чтобы отобразить это в Excel, я использую пользовательский формат: гггг-мм-дд чч: мм: сс.00 утра / вечера. При преобразовании в general отображается серийная дата 41913.5945052431.

Когда я создаю источник Excel в SSIS (SQL Server Data Tools 2012), я получаю следующее, когда я нажимаю кнопку предварительного просмотра:

Предварительный просмотр SSIS - 10/1/2014 2:16:05 вечера

Секунды округляются до ближайшей целой секунды вместо дробных секунд. Если я экспортирую из Excel в CSV, я могу импортировать CSV нормально. Вот изображение CSV:

1,2014-10-01 02:16:05.25 PM

Как я могу заставить исходный код Excel в SSIS поддерживать дробные секунды?

Ответ №1:

Попробуйте использовать тип данных DT_DBTIMESTAMP.

или

Вы можете использовать компонент сценария, как показано ниже.

 DateTime dateTime = DateTime.Parse(Dts.Variables["DateTimeString"].Value.ToString());
Dts.Variables["DateTimeString"].Value = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); 
  

Комментарии:

1. Это сработало. Изначально я пробовал задачу преобразования данных, но это не сработало. Я использовал следующие преобразования для преобразования входящего DateTime в строку и в DBTIMESTAMP, которые оба включают дробные секунды. OutDateTime — это строка, а OutTimestamp — это временная метка. DateAndTime — это входные данные типа DT_DATE. Row.OutDateTime = Row.DateandTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); Row.OutTimestamp = Row.DateandTime;