【问题标题】:Oracle : how to subtract two dates and get minutes of the resultOracle:如何减去两个日期并获得结果的分钟数
【发布时间】:2012-11-04 17:16:25
【问题描述】:

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

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 date plsql


【解决方案1】:

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

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

【讨论】:

  • 我的问题是生成的对象 (minutesBetween) 的持续时间与 date2 和 date1 之间的分钟数一样多。我如何获得一个简单的数字?我想我无法转换 to_number(...)。谢谢。
【解决方案2】:

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

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 ...

【讨论】:

  • 我推荐这个答案,因为它不依赖于存储在数据库中的日期格式。获取经过的分钟数:SELECT (SYSDATE-CAST(date_column AS DATE))* 1440 FROM my_table
【解决方案3】:

我可以这样处理:

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 ...

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

【讨论】:

    【解决方案4】:

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

    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 中是大而难看的数字,而不是我们在屏幕上看到的;我们不需要告诉他如何阅读它们。 还要记住时间戳可以定义一个时区;在这种情况下不是。

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2011-11-19
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多