web-dev-qa-db-fra.com

Comment calculer la différence entre deux dates dans Oracle 11g SQL

Lorsque je tente de calculer la différence de date à l’aide de la fonction de datiff, cet identifiant non valide est affiché. 

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

Error : invalid identifier.

Pouvez-vous s'il vous plaît me dire quelle est la fonction pour calculer la différence de date.

6
Santhosh Kancherla

Il n'y a pas de fonction DATEDIFF() dans Oracle. Sur Oracle, c'est un problème arithmétique

select DATE1-DATE2 from table 
16
Mikhail Timofeev

Oracle prend en charge Mathematical Subtract - sur le type de données. Vous pouvez directement mettre dans la clause suivante la déclaration suivante:

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

Consultez l'exemple EXEMPLE pour plus de visibilité.

Au cas où vous auriez besoin de la sortie en termes d’heures, l’aide ci-dessous pourrait vous aider;

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];
5
Nadeem_MK

Vous ne pouvez pas utiliser DATEDIFF Mais vous pouvez utiliser ceci (si les colonnes ne sont pas de type date):

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

vous pouvez voir l'échantillon

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

1
Ersin Gülbahar

Vous pouvez utiliser ceci:

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;
1
Davy Machado

en gros, to_char (sysdate, 'DDD') ne renvoie pas de jours du 1 er janvier au aaaa à sysdate de sorte que si vous soustrayez deux dates, vous obtiendrez une différence

sélectionnez to_char (sysdate, 'DDD') -to_char (to_date ('19-08-1995 ',' jj-mm-aaaa '),' DDD ') de dual;

0
sandeep veeramalla