#sql-server #excel #ssis
#sql-сервер #excel #ssis
Вопрос:
У меня есть рабочая книга Excel 2013 (XLSX), которая содержит даты с дробными секундами. Я пытаюсь импортировать это в SQL Server 2012, но, похоже, он всегда теряет доли секунды.
Вот таблица Excel, показывающая доли секунды:
Чтобы отобразить это в Excel, я использую пользовательский формат: гггг-мм-дд чч: мм: сс.00 утра / вечера. При преобразовании в general отображается серийная дата 41913.5945052431.
Когда я создаю источник Excel в SSIS (SQL Server Data Tools 2012), я получаю следующее, когда я нажимаю кнопку предварительного просмотра:
Секунды округляются до ближайшей целой секунды вместо дробных секунд. Если я экспортирую из Excel в CSV, я могу импортировать CSV нормально. Вот изображение CSV:
Как я могу заставить исходный код 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;