日期算術 - 日數小時或秒的日期之間的差異
在 oracle 中,可以使用減法找到兩個 DATE
之間的差異(以天為單位和/或其中的分數):
SELECT DATE '2016-03-23' - DATE '2015-12-25' AS difference FROM DUAL;
輸出兩個日期之間的天數:
DIFFERENCE 89
和:
SELECT TO_DATE( '2016-01-02 01:01:12', 'YYYY-MM-DD HH24:MI:SS' )
- TO_DATE( '2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' )
AS difference
FROM DUAL
輸出兩個日期之間的天數:
DIFFERENCE 1.0425
通過將該數字分別乘以 24
,24*60
或 24*60*60
可以得到小時,分鐘或秒的差異。
可以更改上一個示例,以使用以下內容獲取兩個日期之間的天,小時,分鐘和秒:
SELECT TRUNC( difference ) AS days,
TRUNC( MOD( difference * 24, 24 ) ) AS hours,
TRUNC( MOD( difference * 24*60, 60 ) ) AS minutes,
TRUNC( MOD( difference * 24*60*60, 60 ) ) AS seconds
FROM (
SELECT TO_DATE( '2016-01-02 01:01:12', 'YYYY-MM-DD HH24:MI:SS' )
- TO_DATE( '2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' )
AS difference
FROM DUAL
);
(注意:使用 TRUNC()
而不是 FLOOR()
來正確處理負差異。)
輸出:
DAYS HOURS MINUTES SECONDS
---- ----- ------- -------
1 1 1 12
前面的例子也可以通過使用 NUMTODSINTERVAL()
將數值差轉換為間隔來解決 :
SELECT EXTRACT( DAY FROM difference ) AS days,
EXTRACT( HOUR FROM difference ) AS hours,
EXTRACT( MINUTE FROM difference ) AS minutes,
EXTRACT( SECOND FROM difference ) AS seconds
FROM (
SELECT NUMTODSINTERVAL(
TO_DATE( '2016-01-02 01:01:12', 'YYYY-MM-DD HH24:MI:SS' )
- TO_DATE( '2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS' ),
'DAY'
) AS difference
FROM DUAL
);