【问题标题】:How to subtract dates and calculating time per day? PLSQL or Java如何减去日期并计算每天的时间? PLSQL 或 Java
【发布时间】:2014-01-22 19:47:04
【问题描述】:

下午好

我的问题是:我需要计算两个日期之间的时间,但条件是,例如,如果第一个日期是 01/20/2014 4:00:00,第二个日期是 01/21/2014: 1:30:00 那么结果应该是:

2014 年 1 月 20 日 = 20 小时 2014 年 1 月 21 日 = 2.5 小时

如果日期范围更宽,例如一周等,则以同样的方式。

我已经设法分辨出差异 plsql 输入两个日期但不是在这种情况下才能知道每天的差异有多大。

知道如何解决这个问题吗?无论是在 plsql 还是 java CODES

提前感谢您的关注

【问题讨论】:

  • “1:30 01/21/2014 : 00”是什么意思?时间是前位还是后位?这个问题非常不清楚。
  • 请阅读How to Ask 并改进您的问题,很难说出您想要实现什么以及如何帮助您。
  • 对不起我的英语,我只是希望正确的问题被理解为改变
  • Oracle 数据库的哪个版本?

标签: java oracle plsql


【解决方案1】:

PL/SQL

将日期相减,然后使用NUMTODSINTERVAL 函数将结果转换为间隔:

SELECT NUMTODSINTERVAL(TO_DATE('01/21/2014 01:30:00', 'MM/DD/YYYY HH24:MI:SS') - 
                         TO_DATE('01/20/2014 04:00:00', 'MM/DD/YYYY HH24:MI:SS'),
                       'DAY') AS TIMEDIFF
  FROM DUAL

这会产生一个结果

TIMEDIFF
+000000000 21:30:00

分享和享受。

【讨论】:

    【解决方案2】:

    您可以创建自己的函数然后使用它。

        CREATE OR REPLACE FUNCTION time_diff (
    DATE_1 IN DATE, DATE_2 IN DATE) RETURN NUMBER IS
    
    NDATE_1   NUMBER;
    NDATE_2   NUMBER;
    NSECOND_1 NUMBER(5,0);
    NSECOND_2 NUMBER(5,0);
    
    BEGIN
      -- Get Julian date number from first date (DATE_1)
      NDATE_1 := TO_NUMBER(TO_CHAR(DATE_1, 'J'));
    
      -- Get Julian date number from second date (DATE_2)
      NDATE_2 := TO_NUMBER(TO_CHAR(DATE_2, 'J'));
    
      -- Get seconds since midnight from first date (DATE_1)
      NSECOND_1 := TO_NUMBER(TO_CHAR(DATE_1, 'SSSSS'));
    
      -- Get seconds since midnight from second date (DATE_2)
      NSECOND_2 := TO_NUMBER(TO_CHAR(DATE_2, 'SSSSS'));
    
      RETURN (((NDATE_2 - NDATE_1) * 86400)+(NSECOND_2 - NSECOND_1));
    END time_diff;
    /
    
        --Difference in Hours: 
    SELECT time_diff(To_Date('01/20/2014 04:00:00',
                                'MM/DD/YYYY HH24:MI:SS'),
                        To_Date('01/21/2014 01:30:00',
                                'MM/DD/YYYY HH24:MI:SS')) / 60 / 60
          FROM Dual
    

    来源:http://psoug.org/reference/date_func.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2011-01-21
      • 1970-01-01
      • 2013-06-10
      相关资源
      最近更新 更多