18

我写了这个函数来获取一个日期的分钟数,但是我不能得到两个日期之间的分钟数,如何得到呢?

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

4 回答 4

50

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

SELECT (date2 - date1) * 24 * 60 AS minutesBetween
FROM ...
于 2012-11-16T01:05:33.727 回答
13

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

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 ...
于 2017-06-16T10:46:15.047 回答
1

我认为您可以调整该函数以减去两个时间戳:

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)

return  EXTRACT(MINUTE FROM cast(p_date1 as TIMESTAMP) - cast(p_date2 as TIMESTAMP));

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

于 2020-01-13T16:14:09.303 回答
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 ...

其他人不适合我。祝你好运。

于 2018-10-31T09:26:43.337 回答