Дней между (целочисленным значением) двумя временными метками в Oracle

Я хочу найти день между двумя временными метками. Запрос должен возвращать целочисленное значение. У меня есть значение столбца и фиксированная дата (например, t.movementdate и "2014-07-23 00:00:00.0").

2 ответа

Вы можете попробовать это

CREATE TABLE t (movementdate TIMESTAMP);
INSERT INTO t VALUES (TIMESTAMP '1014-07-21 03:23:02.0');
INSERT INTO t VALUES (TIMESTAMP '2014-07-22 10:54:02.0');

select actual_diff,extract (day from actual_diff)+
                   extract (hour from actual_diff)/24            
                  +extract (minute from actual_diff)/(60*24) 
                  +extract (second from actual_diff)/(60*60*24)                                                              
                   diff_in_days 
from (select systimestamp- movementdate as actual_diff from t);

Хороший вопрос. ИМХО Арифметика метки времени у Oracle довольно некрасива. Если вам нужна разница в днях, вы можете перевести TIMESTAMP к DATE, В зависимости от ваших потребностей, вы также можете сбросить минуты и часы с TRUNC, Когда у вас есть DATEs, вы можете просто вычесть их, чтобы получить разницу в днях:

CREATE TABLE t (movementdate TIMESTAMP);
INSERT INTO t VALUES (TIMESTAMP '2014-07-21 03:23:02.0');
INSERT INTO t VALUES (TIMESTAMP '2014-07-22 10:54:02.0');

SELECT t.movementdate, DATE '2014-07-23' - trunc(t.movementdate) as daydiff  FROM t;

MOVEMENTDATE                  DAYDIFF
----------------------------  ----
21.07.2014 03:23:02,000000000 2
22.07.2014 10:54:02,000000000 1 
Другие вопросы по тегам