Службы SSIS: формат даты Выпустите файл CSV в таблицу SQL Server: обмен DD и MM - PullRequest
3 голосов
/ 12 июня 2019

У меня есть CSV-файл со столбцом даты в формате MM / DD / YYYY. Когда я загружаю файл csv в таблицу SQL Server с помощью SSIS, я хотел бы иметь следующий формат: ГГГГ-ММ-ДД.

Проблема в том, что если в файле csv содержится дата со значением дня от 1 до 12, то день и месяц меняются местами.

Пример:

12/06/2019 in csv file -> 2019-06-12 in SQL Server table: DD and MM are swapped
MM/DD/YYYY  ->  YYYY-MM-DD

Как можно сделать так, чтобы 2019-12-06 были в таблице SQL Server?

Заранее спасибо за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Это распространенная проблема, поскольку при обработке форматов строки даты ММ / дд / гггг и дд / мм / гггг, а месяц и день меньше 12.

Поскольку файлы CSV являются текстовыми файлами, дата сохраняетсякак текст, неявное преобразование этих полей в поле даты и времени (база данных sql) может вызвать эту проблему.

Лучший способ убедиться, что даты конвертируются правильно, это добавить компонент Script, добавить столбец Output типа DT_DATE (пример: outDate) и использование функции DateTime.ParseExact() для принудительного преобразования с использованием формата MM/dd/yyyy:

Row.outDate = DateTime.ParseExact(Row.csvDateFiled,"MM/dd/yyy",System.Globalization.CultureInfo.InvariantCulture);

Более подробные сведения можно найти в следующем аналогичном вопросе:

0 голосов
/ 12 июня 2019

Я не понимаю, почему это не должно работать.Я взял пример:1. Создана таблица

CREATE TABLE [dbo].[DateTable](
[TestDat] [datetime] NULL,
[TestDat1] [datetime] NULL,
[TestDat2] [datetime] NULL,
[TestDat3] [datetime] NULL) ON [PRIMARY]

2. Создан файл CSV со следующими датами:12/06 / 2019,01 / 06 / 2019,02 / 06 / 2019,03 / 06/2019

Создан пакет служб SSIS только с потоком данных.Задача потока данных содержит источник плоских файлов и назначение OLE DB.Задача DataFlow выглядит следующим образом:enter image description hereИ отображение в OLE DB Destination выглядит так:enter image description here

После запуска пакета служб SSIS я получаю следующие данные, заполненные таблицей SQL Server.Это всегда взял 06 в качестве даты.SQL Table Result

...