我写这个函数是为了从日期中得到分钟,但我不能在两个日期之间得到分钟,如何得到它?
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;
答案 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 ...
其他人对我不起作用。 祝你好运。