Преобразование поля даты varchar в тип данных datetime [дубликат]
Я совершил ошибку, используя varchar для хранения моих данных, представляющих дату / время. Теперь я пытаюсь преобразовать свой столбец текстовых данных, хранящихся как varchar, например:
2020-11-25T14:22:41.3539327Z
В столбец, в котором хранится тип данных datetime.
Ответы
При условии, что все ваши данные находятся в формате, yyyy-MM-ddThh:mm:ss.nnnnnnn
вы можете просто изменить тип данных столбца:
ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);
Если вам нужен часовой пояс, используйте datetimeoffset(7)
вместо него.
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)
в зависимости от того, какая точность вам нужна, вы можете использовать ссылку ниже, чтобы найти ее и изменить 120 на любое число, которое вам нужно для этой точности.
https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/
Чтобы исправить свою таблицу, вы должны выполнить следующие действия:
- Добавьте в таблицу новый столбец для DateTime
- Запустите обновление в своей таблице, используя преобразование выше, чтобы обновить новый столбец преобразованным значением из поля varchar.
- Затем отбросьте столбец с данными varchar.
Код для выполнения шагов, описанных выше
ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME
-- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
UPDATE dbo.TableName
SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)
ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL