Преобразование поля даты varchar в тип данных datetime [дубликат]

Dec 16 2020

Я совершил ошибку, используя varchar для хранения моих данных, представляющих дату / время. Теперь я пытаюсь преобразовать свой столбец текстовых данных, хранящихся как varchar, например:

2020-11-25T14:22:41.3539327Z

В столбец, в котором хранится тип данных datetime.

Ответы

1 Larnu Dec 16 2020 at 02:49

При условии, что все ваши данные находятся в формате, yyyy-MM-ddThh:mm:ss.nnnnnnnвы можете просто изменить тип данных столбца:

ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);

Если вам нужен часовой пояс, используйте datetimeoffset(7)вместо него.

Brad Dec 16 2020 at 02:33
-- 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/

Чтобы исправить свою таблицу, вы должны выполнить следующие действия:

  1. Добавьте в таблицу новый столбец для DateTime
  2. Запустите обновление в своей таблице, используя преобразование выше, чтобы обновить новый столбец преобразованным значением из поля varchar.
  3. Затем отбросьте столбец с данными 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