MS SQL Server: сохранение mm-dd - год чч-мм-сс am / pm убивает время datetime - PullRequest
0 голосов
/ 08 ноября 2018

Я получил через API json с форматированием даты и времени, например: 4 декабря 2018 11:10:00 (это как: мм-дд - год чч-мм-сс am / pm) Я добавил строку datetime в таблицу в MS SQL Server 2016 и импортировал данные. Я ожидал, что дата и время будут отображаться как 2018-12-04 11: 10: 00.000, но в процессе импорта SQL Server убивает записи временной части. Таким образом, сохраняется только 2018-12-04 00: 00: 00.000. Я проверил Google и stackoverflow, но нашел причину для этого.

Любые советы?


Редактировать

Я сохранил информацию json в переменной и импортировал данные через @json/OPENJSON и объединил их через tsql "merge" в таблицу.

1 Ответ

0 голосов
/ 08 ноября 2018

Используемый формат даты и времени представляет собой совокупность всех никогда не делающих это в одном пакете ... Это зависит от языка, культуры и нестандартности.

Но - везунчик - вы очень близки к существующему стандартному формату в SQL-Server. Прочитайте о CAST() и CONVERT() и третьем параметре. .

Попробуйте это:

SET LANGUAGE ENGLISH;
DECLARE @YourDateTimeString VARCHAR(100)='December 4 2018, 11:10:00 AM';

SELECT CONVERT(DATETIME,REPLACE(@YourDateTimeString,',',''),109);

Обязательно используйте язык, который знает «декабрь». В моей культуре (немецком) это был «декабрь», и сценарий провалился бы ...

Кажется, достаточно заменить запятую, чтобы перейти в формат 109 ...

Если есть возможность изменить ввод, попробуйте убедить отправляющую сторону использовать стандартный формат, лучше всего ISO8601 (yyyyMMddTHH:mm:ss).

UPDATE

Во время тестирования у меня запятая была не в том месте. С данной строкой это работает даже без каких-либо замен:

SET LANGUAGE ENGLISH;
DECLARE @YourDateTimeString VARCHAR(100)='December 4, 2018 11:10:00 AM';

SELECT CONVERT(DATETIME,@YourDateTimeString,109);
...