【问题标题】:Time stamp to something readable时间戳记到可读的东西
【发布时间】:2019-08-21 19:05:33
【问题描述】:

我有这个 SQL 查询,它可以准确地提取我想要的内容,但我无法将时间戳转换为可读的内容。 这是数据库输出的内容:

时间戳应该是8/21/19 1:56 PM

这是我现在的 SQL 查询: 有人可以帮我弄这个吗?谢谢!

select MACHINE_ID as ZUM_TOOL_GROUP, LAST_VALUE as MISTI, LAST_TIMESTAMP  
from machine_signal
where machine_id like 'WSI%' and signal_id = 'RT2_COUNT'
order by ZUM_TOOL_GROUP ASC

使用新代码更新图片:

新代码:

select MACHINE_ID as ZUM_TOOL_GROUP, LAST_VALUE as MISTI,
(date '1970-01-01' + LAST_TIMESTAMP / (24 * 60 * 60 * 1000)) as time_date
from machine_signal
where machine_id like 'WSI%' and signal_id = 'RT2_COUNT'
order by ZUM_TOOL_GROUP ASC

格式完美无缺,但如何正确获取时间戳?应该是下午 12 点 19 分而不是下午 5 点 19 分

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这看起来是以毫秒为单位的 Unix 时间戳。这是一个简单的转换:

    select date '1970-01-01' + 1566402391000 / (24 * 60 * 60 * 1000)
    from dual;
    

    如果您希望在特定时区使用此功能,则应将其抵消适当的数量。

    【讨论】:

    • 嗨,@Gordan 感谢您的快速回复,但这只会做一个时间戳。所有时间戳都会不同,并且每秒更新一次。我怎样才能为这个列表中的所有值做到这一点?我只是截取了一个条目的屏幕截图。
    • 只需将您的字段名称替换为示例中的硬编码值1566402391000。关键是您看到的 LAST_TIMESTAMP 值是自 1970 年 1 月 1 日午夜以来的毫秒数。
    • 您的查询返回 2019-08-21 15:46:31,这是 UTC 时间。为了获得当地时间,您应该将其更改为 (TIMESTAMP '1970-01-01 00:00:00 UTC' + 1566402391000 / 1000 * INTERVAL '1' SECOND) AT LOCAL - 但我不知道 10 分钟的差异来自哪里。
    • @Gordan Linoff 我使用了您推荐的代码并进行了修复,但由于某种原因,时间已过。你能帮我解决这个小问题吗?感谢您的帮助!
    • @Dc5nipe 。 . . 10分钟真的很难解释。 1 小时将是一个时间戳问题。一两秒钟将是一些调整。
    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多