Oracle:如何减去两个日期并获得结果的分钟数

时间:2012-11-16 00:49:19

标签: oracle date plsql

我写这个函数是为了从日期中得到分钟,但我不能在两个日期之间得到分钟,如何得到它?

FUNCTION get_minute(p_date DATE)
RETURN NUMBER
IS
BEGIN
    IF p_date IS NOT NULL THEN
        return  EXTRACT(MINUTE FROM TO_TIMESTAMP(to_char(p_date,'DD-MON-YYYY HH:MI:SS'),'DD-MON-YYYY HH24:MI:SS'));
    ELSE
        RETURN 0;
    END IF;
END get_minute;

4 个答案:

答案 0 :(得分:33)

在Oracle中减去两个日期时,您将获得两个值之间的天数。所以你只需要在几分钟内相乘得到结果:

SELECT (date2 - date1) * 24 * 60 AS minutesBetween
FROM ...

答案 1 :(得分:8)

对于那些想要替换两个时间戳(而不是日期)的人,有一个类似的解决方案:

SELECT ( CAST( date2 AS DATE ) - CAST( date1 AS DATE ) ) * 1440 AS minutesInBetween
FROM ...

SELECT ( CAST( date2 AS DATE ) - CAST( date1 AS DATE ) ) * 86400 AS secondsInBetween
FROM ...

答案 2 :(得分:1)

我认为您可以修改该函数以减去两个时间戳记:

const reverseString = str => str.split('').reverse().join('');

我认为您可以仅使用return EXTRACT(MINUTE FROM TO_TIMESTAMP(to_char(p_date1,'DD-MON-YYYY HH:MI:SS'),'DD-MON-YYYY HH24:MI:SS') - TO_TIMESTAMP(to_char(p_date2,'DD-MON-YYYY HH:MI:SS'),'DD-MON-YYYY HH24:MI:SS') ); 来简化它。

CAST(p_date as TIMESTAMP)

记住日期和时间戳是Oracle内部的一个丑陋数字,而不是我们在屏幕上看到的;我们不需要告诉他如何阅读它们。 还要记住,时间戳可以定义一个时区。在这种情况下不会。

答案 3 :(得分:0)

我可以这样处理:

select to_number(to_char(sysdate,'MI')) - to_number(to_char(*YOUR_DATA_VALUE*,'MI')),max(exp_time)  from ...

或 如果您想小时,只需更改MI;

select to_number(to_char(sysdate,'HH24')) - to_number(to_char(*YOUR_DATA_VALUE*,'HH24')),max(exp_time)  from ...

其他人对我不起作用。 祝你好运。