Как рассчитать разницу между двумя датами в oracle 11g SQL

когда я пытаюсь вычислить разницу дат, используя функцию datediff, она показывает этот недопустимый идентификатор.

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

Error : invalid identifier.

можете вы пожалуйста сказать мне что функция для того чтобы высчитать разницу в даты.

6 ответов


нет DATEDIFF() функции в Oracle. В Oracle, это арифметический вопрос

select DATE1-DATE2 from table 

поддержка Oracle математическое вычитание - оператор на типе данных данных. Вы можете напрямую поместить в предложение 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];

вы не можете использовать 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


вы можете использовать это:

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;

в основном to_char (sysdate,'DDD') возвращает no дней от 1-jan-yyyy до sysdate так что, если вычесть две даты, он вернет это,вы получите разницу между двумя датами

выберите to_char(компания "Новые системы", "ДДД") - to_char(даты('19-08-1995','ДД-ММ-гггг'),'ДДД') от двойной;


Oracle DateDiff - это другой продукт, возможно mysql (который теперь принадлежит Oracle).

разница между двумя датами (в обычном продукте базы данных oracle) в днях (которые могут иметь дробные части). Фактор 24, чтобы получить часы, 24 * 60, чтобы получить минуты, 24*60*60 чтобы получить секунды (это так же мало, как даты). Математика на 100% точна для дат в течение нескольких сотен лет или около того. Е. Г. чтобы получить дату за одну секунду до полуночи сегодня, вы могли бы скажи

выберите trunc (sysdate) - 1/24/60/60 из dual;

Это означает "время прямо сейчас", усеченное, чтобы быть только датой (т. е. полночь, которая произошла сегодня утром). Затем он вычитает число, которое является долей 1 дня, которая измеряет одну секунду. Это дает вам дату с предыдущего дня с временной составляющей 23:59: 59.