【问题标题】:How to extract millisecond from date in Oracle?如何在 Oracle 中从日期中提取毫秒?
【发布时间】:2016-07-02 00:32:30
【问题描述】:

我有完整的日期(有时间)。 但我只想要从日期开始的毫秒数。

请告诉我一种解决方案

例如:date= 2016/03/16 10:45:04.252 我想要这个答案=252

我尝试使用这个查询。

SELECT ADD_MONTHS(millisecond, -datepart('2016/03/16 10:45:04.252', millisecond),
     '2016/03/16 10:45:04.252') FROM DUAL;

但我没有成功。

【问题讨论】:

    标签: sql oracle11g timestamp


    【解决方案1】:

    我有完整的日期(有时间)

    这只能使用timestamp 来完成。尽管 Oracle 的 date 确实包含时间,但它只存储秒,而不是毫秒。


    要从 时间戳 获取小数秒,请使用 to_char() 并将其转换为数字:

    select to_number(to_char(timestamp '2016-03-16 10:45:04.252', 'FF3'))
    from dual;
    

    【讨论】:

    • 感谢您的努力。我得到了答案
    • 这是最干净的答案。
    • EXTRACT( timestamp_value, MILLISECOND ) 呢? (编辑:啊,那只是在“Oracle 大数据”中,不是 Oracle 数据库,即使是在 21c 版本中,这太疯狂了……)
    • 我注意到这在 Oracle 11g 中有效:SELECT ( timestamp_value - CAST( ValidFrom AS timestamp(0) ) ) AS ms FROM tableName 但是ms 的类型仍然是timestamp(n)
    【解决方案2】:
    SELECT 
    TRUNC((L.OUT_TIME-L.IN_TIME)*24)           ||':'||
    TRUNC((L.OUT_TIME-L.IN_TIME)*24*60)        ||':'||
    ROUND(CASE WHEN ((L.OUT_TIME-L.IN_TIME)*24*60*60)>60 THEN ((L.OUT_TIME-L.IN_TIME)*24*60*60)-60 ELSE ((L.OUT_TIME-L.IN_TIME)*24*60*60) END ,5) Elapsed
    FROM XYZ_TABLE
    

    【讨论】:

    • 仅代码的答案虽然是正确的,但对于理解解决方案并没有真正的帮助。请考虑添加一些文字来解释您所做的事情以及代码的含义
    猜你喜欢
    • 2017-10-29
    • 2012-11-20
    • 2021-08-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多