PL/SQL时间段计算

Posted

技术标签:

【中文标题】PL/SQL时间段计算【英文标题】:PL/SQL time segment calculation 【发布时间】:2010-05-05 19:37:54 【问题描述】:

我需要计算两次之间经过了多少时间。例如:

(14:00:00 - 13:15:00) * 24 = .75

我需要这个稍后将 KW 转换为 KWh,但这不是重点。

我不知道如何在 PL/SQL 中执行此操作。

我的日期/时间字段在 DB 中如下所示:

2010 年 1 月 23 日 21:00:00

如果有任何建议,我将不胜感激。

史蒂夫

【问题讨论】:

您使用的是哪个版本的 Oracle?询问的原因是在 9i 中添加了内置功能,应该能够使这更容易 【参考方案1】:

如果您使用的是上面的 9i,这会给您带来预期的结果吗?

select extract(hour from numtodsinterval(to_date('14:00:00','HH24:MI:SS') - to_date('13:15:00','HH24:MI:SS'),'DAY'))
||':'|| extract(minute from numtodsinterval(to_date('14:00:00','HH24:MI:SS') - to_date('13:15:00','HH24:MI:SS'),'DAY')) diff
from dual
/

DIFF
------------------

0:45

摘录详细here

和numtodsinterval详细here

【讨论】:

非常感谢您提供的快速解决方案。现在我正在努力解决我认为自己的数据问题。我收到此错误:“ORA-01858:在预期数字的地方发现了一个非数字字符”- dateTime 字段如下所示:8/12/2009 14:29:59 - 我不明白 很高兴我能帮上忙 - 而不是 to_date('14:00:00','HH24:MI:SS') 如何使用 to_date('8/12/2009 14:29:59' , 'MM/DD/YYYY HH24:MI:SS') 我不知道我的月份 (MM) 和日期 (DD) 是否在正确的位置,但你应该可以交换这些 再次感谢,我这样做了,但奇怪的是,如果我将日期/时间硬编码到它工作的函数中,当我从表中获取它时,我得到了那个错误。日期是从表里抄来的,怎么可能……反正你已经帮了我这么大的忙了。再次感谢您。 如果你运行这个查询:select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT' 你得到什么日期格式?如果它与您的期望不同并且数据库设置尝试使用 ALTER SESSION SET NLS_DATE_FORMAT='YOUR DATE FORMAT' 我没有蟾蜍,所以如果你在 sql 中运行这个命令,你会得到什么?显示参数 nls_date_format

以上是关于PL/SQL时间段计算的主要内容,如果未能解决你的问题,请参考以下文章

如何使用计算值更新带有 PL\SQL 的列

pl/sql 程序员在计算货币时常犯的错误是啥?

PL/SQL 性能优化 - 根据记录更改计算总和和微分

在 PL/SQL 中计算布尔值

编写一个 PL/SQL 代码来计算数字(1-10)的 2 的幂?

PL/SQL 程序来计算年龄以及你的生日年份是不是是闰年[关闭]