【问题标题】:SQL Oracle Developer and Time CalculationsSQL Oracle Developer 和时间计算
【发布时间】:2016-04-25 19:51:57
【问题描述】:

我正在尝试计算时间差,例如:

from 10:00 to 11:30

它必须显示 1:30 — 这就是区别 — 但它显示的是 00000000 1:30:000000

我怎样才能让这个选择语句显示这个答案?我尝试了很多方法,但都不起作用。

select TO_CHAR(TO_TIMESTAMP(ARRIVAL,'HH:MI:SS') - (TO_TIMESTAMP (START,'HH:MI:SS'))) as Du
from passenger;

【问题讨论】:

  • 10:30到11:30的差怎么等于1:30?不是 1:00 吗?
  • 对不起,我的意思是 10:00 到 11:30
  • 我不同意将其标记为链接问题的“精确”副本,该问题有五个答案 - 全部用于不同的问题,其中 OP 希望保留三位小数秒。在这个(标记的)问题中提出的问题并没有要求,所以答案应该更简单。将此标记为旧问题的“精确”副本是一种误导。如果你能找到一个确切的重复链接,否则重新打开这个问题。不确定这是否是反对您的标志的正确过程...如果我错过了它,请指出我的文档(我搜索不成功)。
  • 为什么它向我显示一个重复的问题但它不同,在我的问题中,我想将结果显示为小时和分钟,例如:(1:30)但它向我显示这样(+000000000 01:30:00.000000000)
  • @user5520587 - 给你的是一个间隔,而副本是关于如何格式化一个间隔。

标签: sql oracle


【解决方案1】:

to_char 的最外层应用程序的参数实际上是INTERVAL DAY TO SECOND 类型,并且没有关联的格式模型。诀窍是通过添加00:00:00 的时间戳将该值转换回时间戳:

select TO_CHAR( TO_TIMESTAMP('00:00:00','HH24:MI:SS') + (TO_TIMESTAMP(ARRIVAL,'HH:MI:SS') - TO_TIMESTAMP (START,'HH:MI:SS')), 'HH24:MI') as Du from passenger;

-- for testing on dual
select TO_CHAR( TO_TIMESTAMP('00:00:00','HH24:MI:SS') + (TO_TIMESTAMP('11:30:00','HH:MI:SS') - TO_TIMESTAMP ('10:00:00','HH:MI:SS')), 'HH24:MI') as Du from dual;

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多