Преобразовать метку времени в дату и время и сохранить, чтобы заменить метку времени

Я использую базу данных SQL Server, и у меня есть столбец даты и времени.

SELECT
    [datetime]
FROM [database].[dbo].[data]

datetime
1584538200000
1584538260000
.............
1584538620000

Теперь я уже знаю, как преобразовать timestamp в datetime:

SELECT DATEADD(second, [datetime] / 1000, '1970-01-01')
FROM [database].[dbo].[data]

Но мой вопрос: как сохранить это преобразованное время и дату, чтобы заменить старую метку времени в базе данных?


person williamfaith    schedule 26.03.2020    source источник
comment
Каков тип данных вашего столбца datetime?   -  person Dale K    schedule 26.03.2020
comment
Спасибо за ответ, это поплавок, но я понятия не имею, какой из них лучше.   -  person williamfaith    schedule 26.03.2020
comment
Если вы хотите сохранить datetime, то *лучше тип данных — datetype или в наши дни datetime2, поэтому, если бы это был я, я бы подумал о создании нового столбца и правильном сохранении даты.   -  person Dale K    schedule 26.03.2020
comment
Хорошая идея, спасибо!   -  person williamfaith    schedule 26.03.2020
comment
Дорогой друг, не могли бы вы помочь мне с этим вопросом stackoverflow.com/questions/60868459/   -  person williamfaith    schedule 26.03.2020


Ответы (1)


Предпочтительно хранить значения в правильном типе данных, то есть datetime или datetime2 (как предложил @Dale K.

Я бы посоветовал вам выполнить следующие шаги.

  1. Создайте новую таблицу всего с двумя столбцами: столбец PrimaryKeycolumn, столбец NewDateTime.
CREATE TABLE data_copy(PKColumn INT, NewDatetimeColumn DATETIME2);
  1. Загрузить данные в data_copy из исходной таблицы данных
 INSERT INTO data_copy(PKColumn, NewDatetimeColumn)
 SELECT PKColumn, DATEADD(second, [datetime] / 1000, '1970-01-01')
 FROM [database].[dbo].[data];
  1. Теперь обновите столбец даты и времени до значений NULL.
 UPDATE [database].[dbo].[data]
    SET [datetime]= NULL;
  1. Теперь измените тип данных на DATETIME.
--IF not null set accordingly
ALTER TABLE [database].[dbo].[data] ALTER COLUMN [datetime] DATETIME2 NULL; 
  1. Теперь обновите значения даты и времени из таблицы копирования.
UPDATE d
SET d.[datetime] = c.datetimecolumn
FROM [database].[dbo].[data] AS d
JOIN [database].[dbo].[data_copy] AS c
ON d.PKColumn = c.PKColumn 
person Venkataraman R    schedule 26.03.2020