将纪元时间戳更新为 dd.mm.yyyy hh.mm.ss.ms

Update epoch timestamp to dd.mm.yyyy hh.mm.ss.ms

我在 table 中有一个名为 a_timestamp 的时间戳列,名为 dataset4_do_edycji - 格式为纪元时间戳。我需要以这种格式将其更新为人类可读:dd.mm.yyyy hh.mm.ss.ms。我尝试使用

UPDATE dataset4_do_edycji SET  a_timestamp=(select dateadd(ms, a_timestamp%(3600*24*1000), 
dateadd(day, a_timestamp/(3600*24*1000), '1970-01-01 00:00:00.0'))) 

但是它抛出错误:

Implicit conversion from data type datetime to bigint is not allowed. Use the CONVERT function to run this query.

目前 a_timestamp 被声明为 bigint。当我 运行 下面显示正确的值时:

select dateadd(ms, a_timestamp%(3600*24*1000), 
    dateadd(day, a_timestamp/(3600*24*1000), '1970-01-01 00:00:00.0')
) as a_timestamp
FROM dataset4_do_edycji

除了以 CSV 格式下载这两个文件并手动将它们合并为一个文件,然后将其作为新文件导入之外,还有什么方法可以更新它 table?谢谢。

一种简单的方法是添加计算列:

alter table dataset4_do_edycji add a_timestamp_dt as
    (dateadd(ms, a_timestamp%(3600*24*1000), 
             dateadd(day, a_timestamp/(3600*24*1000), '1970-01-01 00:00:00.0')
            )
    )

然后在您查询时计算列值,因此它始终是最新的。