将时间戳转换为日期时间并保存以替换时间戳
Convert timestamp into datetime and save to replace timestamp
我正在使用 SQL 服务器数据库并且我有一个日期时间列。
SELECT
[datetime]
FROM [database].[dbo].[data]
datetime
1584538200000
1584538260000
.............
1584538620000
现在我已经知道如何将 timestamp
转换为 datetime
:
SELECT DATEADD(second, [datetime] / 1000, '1970-01-01')
FROM [database].[dbo].[data]
但我的问题是如何保存这个转换后的日期时间来替换数据库中的旧时间戳?
最好将值存储在正确的数据类型中,即 datetime 或 datetime2(如 @Dale K 所建议的那样。
我建议您按照以下步骤操作。
- 新建 table 仅包含两列:PrimaryKey 列、NewDateTime 列
CREATE TABLE data_copy(PKColumn INT, NewDatetimeColumn DATETIME2);
- 从原始数据table
加载数据到data_copy
INSERT INTO data_copy(PKColumn, NewDatetimeColumn)
SELECT PKColumn, DATEADD(second, [datetime] / 1000, '1970-01-01')
FROM [database].[dbo].[data];
- 现在,将日期时间列更新为 NULL 值
UPDATE [database].[dbo].[data]
SET [datetime]= NULL;
- 现在,将数据类型更改为 DATETIME
--IF not null set accordingly
ALTER TABLE [database].[dbo].[data] ALTER COLUMN [datetime] DATETIME2 NULL;
- 现在,更新副本中的日期时间值 table
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
我正在使用 SQL 服务器数据库并且我有一个日期时间列。
SELECT
[datetime]
FROM [database].[dbo].[data]
datetime
1584538200000
1584538260000
.............
1584538620000
现在我已经知道如何将 timestamp
转换为 datetime
:
SELECT DATEADD(second, [datetime] / 1000, '1970-01-01')
FROM [database].[dbo].[data]
但我的问题是如何保存这个转换后的日期时间来替换数据库中的旧时间戳?
最好将值存储在正确的数据类型中,即 datetime 或 datetime2(如 @Dale K 所建议的那样。
我建议您按照以下步骤操作。
- 新建 table 仅包含两列:PrimaryKey 列、NewDateTime 列
CREATE TABLE data_copy(PKColumn INT, NewDatetimeColumn DATETIME2);
- 从原始数据table 加载数据到data_copy
INSERT INTO data_copy(PKColumn, NewDatetimeColumn)
SELECT PKColumn, DATEADD(second, [datetime] / 1000, '1970-01-01')
FROM [database].[dbo].[data];
- 现在,将日期时间列更新为 NULL 值
UPDATE [database].[dbo].[data]
SET [datetime]= NULL;
- 现在,将数据类型更改为 DATETIME
--IF not null set accordingly
ALTER TABLE [database].[dbo].[data] ALTER COLUMN [datetime] DATETIME2 NULL;
- 现在,更新副本中的日期时间值 table
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