Мне нужно использовать Oracle, но функция DATEDIFF не работает в Oracle DB.
Как написать следующий код в Oracle? Я видел несколько примеров с использованием INTERVAL или TRUNC.
SELECT DATEDIFF ('2000-01-01','2000-01-02') AS DateDiff;
В Oracle вы можете просто вычесть две даты и получить разницу в днях. Также обратите внимание, что в отличие от SQL Server или MySQL, в Oracle вы не можете выполнить оператор select
без предложения from
. Один из способов обойти это - использовать встроенную фиктивную таблицу dual
:
SELECT TO_DATE('2000-01-02', 'YYYY-MM-DD') -
TO_DATE('2000-01-01', 'YYYY-MM-DD') AS DateDiff
FROM dual
Просто вычтите две даты:
select date '2000-01-02' - date '2000-01-01' as dateDiff
from dual;
Результатом будет разница в днях.
Более подробную информацию можно найти в руководстве:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042
Вы можете просто вычесть две даты. Для этого нужно сначала привести их к единому виду, используя to_date
:
select to_date('2000-01-01', 'yyyy-MM-dd')
- to_date('2000-01-02', 'yyyy-MM-dd')
datediff
from dual
;
Результат будет в днях, так как разница этих двух дат равна -1
(вы можете поменять две даты местами, если хотите). Если вы хотите получить результат в часах, просто умножьте его на 24.
Мы можем напрямую вычитать даты, чтобы получить разницу в Днях.
SET SERVEROUTPUT ON ;
DECLARE
V_VAR NUMBER;
BEGIN
V_VAR:=TO_DATE('2000-01-02', 'YYYY-MM-DD') - TO_DATE('2000-01-01', 'YYYY-MM-DD') ;
DBMS_OUTPUT.PUT_LINE(V_VAR);
END;