【问题标题】:Convert timestamp into datetime and save to replace timestamp将时间戳转换为日期时间并保存以替换时间戳
【发布时间】:2020-07-06 17:06:16
【问题描述】:

我正在使用 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]

但我的问题是如何保存转换后的日期时间以替换数据库中的旧时间戳?

【问题讨论】:

  • 你的日期时间列的数据类型是什么?
  • 谢谢回复,是float,不知道哪个更好。
  • 如果你想存储 datetime 那么 *better 数据类型是 datetype 或者现在是 datetime2,所以如果是我,我会考虑创建一个新列并正确存储日期。
  • 好主意,谢谢!
  • 亲爱的朋友,你能帮我解决这个问题吗stackoverflow.com/questions/60868459/…

标签: sql sql-server datetime timestamp sql-timestamp


【解决方案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. 现在,将 datetime 列更新为 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 

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2017-04-25
    • 2022-01-08
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多