【问题标题】:Update epoch timestamp to dd.mm.yyyy hh.mm.ss.ms将纪元时间戳更新为 dd.mm.yyyy hh.mm.ss.ms
【发布时间】:2021-03-16 22:01:25
【问题描述】:

我在名为 dataset4_do_edycji 的表中有名为 a_timestamp 的时间戳列 - 格式化为纪元时间戳。我需要以这种格式将其更新为人类可读的: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'))) 

但是它会引发错误:

不允许从数据类型 datetime 到 bigint 的隐式转换。使用 CONVERT 函数运行此查询。

目前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 格式下载两个文件并手动将它们合并为一个,然后将其作为新表导入之外,还有什么方法可以更新它?谢谢。

【问题讨论】:

标签: sql sql-server sql-update epoch dateadd


【解决方案1】:

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

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')
            )
    )

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

【讨论】:

  • 谢谢你,我想没有人会因为留下时间戳列而生气。它有效:)
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2021-01-18
  • 2018-08-03
  • 1970-01-01
  • 2020-06-24
  • 2019-03-04
相关资源
最近更新 更多