Как рассчитать разницу между двумя датами в oracle 11g SQL
когда я пытаюсь вычислить разницу дат, используя функцию datediff, она показывает этот недопустимый идентификатор.
SELECT DATEDIFF(day,'2008-08-05','2008-06-05') AS DiffDate from da_static_trade.
Error : invalid identifier.
можете вы пожалуйста сказать мне что функция для того чтобы высчитать разницу в даты.
6 ответов
поддержка 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
вы можете увидеть образец
вы можете использовать это:
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.