oracle中如何减去2个日期以获得小时和分钟的结果
我想减去 2 个日期,并以一位小数表示小时和分钟的结果。
我有下表,我正在这样做,但结果不符合预期。
有一些细微的变化,我确信这是简单的算术,但我没有得到正确的结果。
select start_time, end_time, (end_time-start_time)*24 from
come_leav;
START_TIME END_TIME (END_TIME-START_TIME)*24 ------------------- ------------------- ------------------------ 21-06-2011 14:00:00 21-06-2011 16:55:00 2.9166667 21-06-2011 07:00:00 21-06-2011 16:50:00 9.8333333 21-06-2011 07:20:00 21-06-2011 16:30:00 9.1666667
我想要如下结果(结束时间-开始时间)。
16:55- 14:00 = 2.55 16:50-07:00 = 9.5 16:30-7:20 = 9.1 and so on.
我怎样才能做到这一点?
I want to subtract 2 dates and represent the result in hour and minute in one decimal figure.
I have the following table and I am doing it in this way but the result is not as desired.
There is some slight variation, I'm sure this is simple arithmetic but I'm not getting it right.
select start_time, end_time, (end_time-start_time)*24 from
come_leav;
START_TIME END_TIME (END_TIME-START_TIME)*24 ------------------- ------------------- ------------------------ 21-06-2011 14:00:00 21-06-2011 16:55:00 2.9166667 21-06-2011 07:00:00 21-06-2011 16:50:00 9.8333333 21-06-2011 07:20:00 21-06-2011 16:30:00 9.1666667
I want the result (end_time-start_time) as below.
16:55- 14:00 = 2.55 16:50-07:00 = 9.5 16:30-7:20 = 9.1 and so on.
How can I do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
对于遇到此代码的人来说,应该注意的是,小数部分是实际的分钟差异,而不是小时的一部分。因此,
.5
代表50 分钟
,而不是30 分钟
。It should be noted for those coming across this code that the decimal portions are ACTUAL minute differences, and not part of an hour.
.5
, therefore, represents50 minutes
, not30 minutes
.试试这个
Try this
Oracle 将日期表示为天数,因此
(end_time-start_time)*24
为您提供小时数。假设您在h
列中有此数字(例如2.9166667
)。然后您可以轻松地将其转换为您想要的格式:FLOOR(h) + (h-FLOOR(h))/100*60
。示例:
就您而言:
Oracle represents dates as a number of days, so
(end_time-start_time)*24
gives you hours. Let's assume you have this number (eg.2.9166667
) inh
column. Then you can easily convert it to the format you want with:FLOOR(h) + (h-FLOOR(h))/100*60
.Example:
In your case:
将时差添加到一天的开始,然后以 24 小时格式从中提取小时、分钟和秒。
注意:注意天数!
示例
SQL
结果
Add the time difference to beginning of the day then extract hours, minutes and seconds out of it in 24 hour format.
NOTE: be aware of days!
Example
SQL
Result
试试这个:
try this:
编辑:如果您需要一个数字,那么
对于字符串结果,如果增量小于 24H:
我会选择
或
...'HH24:MI:SS'
,但这是我个人的偏好。对于超过 24 小时的术语,我会在前面加上
“是”,因为预言机以天为单位进行计数,精度为秒,您正在处理算术问题。一次,因为您只处理分钟(因此您可能将数字舍入为
trunc(days*24*60+0.5)/24/60
),但数字 1/24/ 上的二进制算术不精确60仍然可能会给你带来麻烦。Edit2.1:
但是对于平均值来说,结果可能会非常令人困惑,因为小数 7.50 表示七个半小时,或至少 7 小时 50 分钟,而不是 7 小时 10 分钟的经过时间。
Edit: if you need a number, then
For string result, if delta is LESS THAN 24H:
I would go with
or
...'HH24:MI:SS'
, but thats my personal preference.for longer than 24H terms, I would prefix with
Yes, as oracle counts in days, with seconds precision, you are dealing with arithmetical problems. Once because you are only handling minutes (so you might round your number to
trunc(days*24*60+0.5)/24/60
), but the binary arithmetic imprecision on the number 1/24/60 might still cause you troubles.Edit2.1:
But The result could be quite confusing for the average, as the decimal 7.50 would suggest seven and a half hour, or at least 7 hour 50 minutes, opposed to the elapsed time of 7 hours 10 minutes.
这个查询对我来说非常有用,如果任何人想要开始日期和结束日期之间的差异以及像 HH:MI:SS 这样的时间,请使用这个查询。
This query is very usefull for me and if any body want diffrence between start_date and end_date with time like HH:MI:SS please use this query.
这是一种非常丑陋的方法,第一部分并没有完全由OP提出问题,但它提供了一种通过减去2个日期字段来获取结果的方法——在我的例子中,是
CREATED_DATE
和今天由SYSDATE
表示:它提供 x 年、x 月、x 天、x 小时、x 分钟的输出。您可以通过更改连接的字符串来重新格式化它。
为了更直接地回答这个问题,我继续写了如何获取以分钟为单位的总小时数
hours.mines
:This is a very ugly way to do it, and this first part doesn't exactly question by the OP, but it gives a way to get results by subtracting 2 date fields -- in my case, the
CREATED_DATE
and today represented bySYSDATE
:It delivers the output as x years, x months, x days, x hours, x minutes. It could be reformatted however you like by changing the concatenated strings.
To more directly answer the question, I've gone ahead and written out how to get the total hours with minutes as
hours.minutes
:您可以使用提取物:
you can work with the extract: