Ошибка преобразования даты и времени в SSIS из формата даты США

У меня проблема с потоком данных SSIS. Я извлекаю данные из SalesForce Marketing Cloud. В одном из расширений данных есть поле даты (в формате США). Проблема в том, что при извлечении данных происходит неправильное преобразование. Иногда он переворачивает месяц и день, а иногда нет.

Источник:

Назначение:

Кто-нибудь знает, по какой причине он неправильно преобразует данные? И что мне делать, чтобы это исправить?

PS: когда я выполняю CONVERT(DATETIME, [CreatedDate], 101), это работает, но если есть способ сделать это непосредственно в SSIS, было бы неплохо

Спасибо.


person Vladimir    schedule 28.09.2018    source источник
comment
каков тип данных этого столбца? База данных не хранит даты ни в каком формате, они хранятся в виде числового значения. Формат, который они отображают на вашем экране, зависит только от клиента и культуры ОС.   -  person GuidoG    schedule 28.09.2018
comment
В источнике тип данных — Datetime (США), в пункте назначения — также Datetime (ЕС).   -  person Vladimir    schedule 28.09.2018
comment
Нет даты и времени (США) или даты и времени (ЕС). На сервере sql есть только дата и время (и дата, время2 и дата вне курса). То, что вы видите, не так, как в вашей базе данных, это ваш клиент и/или ОС, которая показывает это так.   -  person GuidoG    schedule 28.09.2018
comment
Я имею в виду, что дата хранится в формате США в исходной базе данных (MM/DD/YYYY HH:MM:SS AM/PM вместо YYYY-MM-DD HH:MM:SS (стандартный сервер Sql))   -  person Vladimir    schedule 28.09.2018
comment
Нет, они не. База данных не использует какой-либо формат для хранения значения даты. Они хранятся в виде числового значения без какого-либо формата. Формат, который вы видите на своих экранах, создается программным обеспечением, а не базой данных.   -  person GuidoG    schedule 28.09.2018
comment
Хорошо, тогда их нет. Я до сих пор не понимаю, как это помогает с вопросом.   -  person Vladimir    schedule 01.10.2018


Ответы (1)


DateTime формат типа данных зависит от культуры вашего компьютера. если вы хотите объединить формат DateTime как одно и то же значение. вам нужно использовать ПРЕОБРАЗОВАТЬ функцию

Тогда ваш тип преобразования может быть строкой, иначе результат будет таким же, в зависимости от вашей компьютерной культуры.

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) + ' '  + convert(VARCHAR(8), GETDATE(), 14)

есть более простой способ использования FORMAT

SELECT FORMAT(GETDATE(),'dd/MM/yyyy hh:mm:ss')
person D-Shih    schedule 28.09.2018
comment
Да, конечно, я понимаю. Службы SSIS также преобразуют поле в обычный формат даты (ГГ-ММ-ДД ЧЧ:ММ:СС). Проблема в том, что он конвертирует неправильно (см. мои скриншоты) - person Vladimir; 28.09.2018
comment
@ Владимир, я добавляю больше объяснений и примеров, вы можете попробовать. - person D-Shih; 28.09.2018
comment
Спасибо, Д-Ших, очень понятно. Но на самом деле я уже пробовал это, и я знаю, что это работает. Я бы хотел, чтобы не Sql-запрос, а SSIS делал это правильно и правильно (не так, как на моих скриншотах) - person Vladimir; 28.09.2018