Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 甲骨文:如何减去两个日期,得到结果的分钟数_Oracle_Date_Plsql - Fatal编程技术网

Oracle 甲骨文:如何减去两个日期,得到结果的分钟数

Oracle 甲骨文:如何减去两个日期,得到结果的分钟数,oracle,date,plsql,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'));

我编写这个函数是为了从一个日期中获取分钟数,但我无法从两个日期之间获取分钟数,如何获取

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;

在Oracle中减去两个日期后,将得到两个值之间的天数。因此,您只需乘以,即可在几分钟内得到结果:

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

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

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

我可以这样处理:

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 ...
其他人不为我工作。
祝你好运。

我想你可以调整函数以减去两个时间戳:

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作为时间戳)
来简化它

记住,日期和时间戳在甲骨文中是丑陋的大数字,而不是我们在屏幕上看到的数字;我们不需要告诉他怎么读。
还要记住,时间戳可以定义时区;在这种情况下不是这样。

to_char(p_date,'MI')
可用于分钟提取我建议此答案的可能重复项,因为它不依赖于数据库中存储的日期格式。获取已用分钟数:从my_表中选择(SYSDATE-CAST(日期列作为日期))*1440
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')
);
return  EXTRACT(MINUTE FROM cast(p_date1 as TIMESTAMP) - cast(p_date2 as TIMESTAMP));