Преобразование datetime не преобразование datetime

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

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

 Sep 17 2020  1:07AM
 

Для

 2020-09-16 20:07:00.000
 

если я попытаюсь обновить всю таблицу с помощью

 UPDATE
OOTYPE 
SET
OOTYPE.LastModified = CONVERT(DATETIME, SWITCHOFFSET(CONVERT(DATETIMEOFFSET, LastModified), 
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
 

он выполняется успешно, но времена все еще находятся в формате

 Sep 17 2020  1:07AM
 

Однако, если я просто выполню простой оператор select, чтобы показать, что он изменился

 SELECT CONVERT(DATETIME, SWITCHOFFSET(CONVERT(DATETIMEOFFSET,lastmodified), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) FROM [OOTYPE]
 

Результат — это именно то, что я ищу…..

 2020-09-16 20:07:00.000
 

У кого-нибудь есть идеи, где я вворачиваю это простое изменение, я потратил на это смущающее количество времени….

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

1. Каков тип данных столбца LastModified ?

2. varchar(26) добрый день, сэр

3. Сохраните datetime как это; затем используйте CONVERT для форматированного отображения — гораздо проще хранить даты как даты!

4. Проблема в том, что вы храните значения даты и времени как a varchar ; существует 6 типов данных даты и времени, и все они бесконечно лучше подходят для хранения таких данных. Что касается формата, данные даты и времени хранятся в виде двоичного значения, это уровень приложения / представления, который должен беспокоиться о формате, а не о СУБД. Исправьте дизайн, а затем выполните форматирование в вашем приложении.

5. Это не так, но если вы просматриваете данные, ваш клиент просмотра делает некоторые предположения и находит способ отобразить их для вас. Если вы преобразовали его (или сохранили) как тип даты date / datetime, то он сохраняется как чистая дата без форматирования.

Ответ №1:

Если я правильно вас понял:

 SELECT CONVERT(varchar, CONVERT(datetime, 'Sep 17 2020  1:07AM'), 121)
 

Вы должны использовать стиль преобразования 121 , который есть yyyy-mm-dd hh:mi:ss.mmm .