如何在Oracle 11g SQL中计算两个日期之间的差异

11

当我使用datediff函数计算日期差异时,它显示无效标识符。

SELECT DATEDIFF(day,'2008-08-05','2008-06-05') AS DiffDate from da_static_trade.

Error : invalid identifier.

请问有什么函数可以计算日期之间的差异吗?

7个回答

22

Oracle中没有DATEDIFF()函数。在Oracle中,这是一个算术问题。

select DATE1-DATE2 from table 

8
如何计算两个日期之间的小时或分钟数,而不仅仅是一个小数? - NealWalters

5

Oracle支持在Data数据类型上使用数学减法运算符-。您可以直接在select语句中使用以下语句:

to_char (s.last_upd – s.created, ‘999999D99′)

如果需要以小时为单位输出结果,则以下内容可能会有所帮助;

请查看示例以获取更多信息。

Select to_number(substr(numtodsinterval([END_TIME]-[START_TIME]),’day’,2,9))*24 +
to_number(substr(numtodsinterval([END_TIME]-[START_TIME],’day’),12,2))
||':’||to_number(substr(numtodsinterval([END_TIME]-[START_TIME],’day’),15,2)) 
from [TABLE_NAME];

2

您不能使用 DATEDIFF 函数,但是如果列不是日期类型,您可以使用以下方法:

SELECT 
to_date('2008-08-05','YYYY-MM-DD')-to_date('2008-06-05','YYYY-MM-DD') 
AS DiffDate from dual

你可以看到样例

http://sqlfiddle.com/#!4/d41d8/34609


1
你可以使用这个:

SET FEEDBACK OFF;
SET SERVEROUTPUT ON;

DECLARE
  V_START_DATE  CHAR(17) := '28/03/16 17:20:00';
  V_END_DATE    CHAR(17) := '30/03/16 17:50:10';
  V_DATE_DIFF   VARCHAR2(17);

BEGIN

SELECT
  (TO_NUMBER( SUBSTR(NUMTODSINTERVAL(TO_DATE(V_END_DATE , 'DD/MM/YY HH24:MI:SS') - TO_DATE(V_START_DATE, 'DD/MM/YY HH24:MI:SS'), 'DAY'), 02, 9)) * 24) +
  (TO_NUMBER( SUBSTR(NUMTODSINTERVAL(TO_DATE(V_END_DATE , 'DD/MM/YY HH24:MI:SS') - TO_DATE(V_START_DATE, 'DD/MM/YY HH24:MI:SS'), 'DAY'), 12, 2)))  || 
              SUBSTR(NUMTODSINTERVAL(TO_DATE(V_END_DATE , 'DD/MM/YY HH24:MI:SS') - TO_DATE(V_START_DATE, 'DD/MM/YY HH24:MI:SS'), 'DAY'), 14, 6) AS "HH24:MI:SS"
  INTO V_DATE_DIFF
FROM 
  DUAL;

DBMS_OUTPUT.PUT_LINE(V_DATE_DIFF);
END;

0

基本上,to_char(sysdate,'DDD') 返回从 1-jan-yyyy 到 sysdate 的天数,因此如果减去两个日期,它将返回它们之间的差异,你将得到两个日期之间的差异

从双重选择中选择 to_char(sysdate,'DDD') -to_char(to_date('19-08-1995','dd-mm-yyyy'),'DDD')


0

在选择语句中使用以下内容:

(((cast(<column_end_date> as date) - cast(<column_start_date> as date)) * 24 * 60)/60) as "SECONDS"

这应该适用于您的情况。


-1

Oracle DateDiff可能是来自不同的产品,可能是mysql(现在属于Oracle)。

在Oracle通常的数据库产品中,两个日期之间的差异以天为单位(可以有小数部分)。乘以24得到小时,乘以24 * 60得到分钟,乘以24 * 60 * 60得到秒(这是日期能表示的最小单位)。对于几百年内的日期,这些计算是100%准确的。 例如,要获得今天午夜前一秒的日期,可以这样写:

select trunc(sysdate) - 1/24/60/60 from dual;

这意味着“现在的时间”,被截断为仅日期(即今天凌晨的时刻)。然后减去一个数字,该数字是测量一秒钟的1天的一小部分。这给出了昨天的日期,其时间组件为23:59:59。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接