SQL 10 函式 3 日期時間函式 - 5 計算日期差額

camper001發表於2011-03-08

有時候我們需要計算連個日期的差額,比如計算“回款日”和驗收日之間所差的天數,或者檢索所有“最後一次登陸日期”與當前日期的差額大於100天的使用者資訊。主流的資料庫系統中都提供了對計算日期差額的支援。

1. MySQL

MySQL中使用DATEDIFF()函式用於計算兩個日期之間的差額,其引數呼叫格式如下:

DATEDIFF(date1, date2 )

函式將返回date1與date2之間的天數差額,如果date2在date1之後,則返回正值,否則返回負值。

比如下面的SQL語句用於計算註冊日期和出生日期之間的天數差額:

SELECT  FRegDay, FBirthday, DATEDIFF(FRegDay, FBirthday), DATEDIFF(FBirthday, FRegDay) FROM T_Person

 

DATEDIFF()函式只能計算兩個日期間的天數擦和,如果要計算兩個日期的周差額等就需要進行換算,比如下面的SQL語句用於計算註冊日期和出生日期之間的週數差額:

SELECT FRegDay, FBirthday, DATEDIFF(FRegDay, FBirthday)/7 FROM T_Person

 

2.Oracle

在Oracle中,可以在兩個日期型別的資料之間使用減號運算子“-”,其計算結果為兩個日期之間的天數差,比如只想下面的SQL語句用於計算註冊日期FRegDay和出生日期FBirthday之間的時間間隔:

SELECT FRegDay, FBirthday, FRegDay-FBirthday FROM T_Person

 

通過減號運算子“-”計算的兩個日期之間的天數差是包含有小鼠部分的。小鼠部分是表示不足一天的部分,比如執行下面的SQL語句用於計算當前時刻和出生日期FBirthday之間的時間間隔:

SELECT SYSDATE, FBirthday, SYSDATE-FBirhday FROM T_Person

 

可以看到天數差的小數部分是非常精確的,所以完全可以精確地表示兩個日期時間值的小事、分、秒甚至毫秒部分。如果要計算兩個日期時間值之間的小時、分、秒甚至毫秒差的話,只要進行相應的換算就可以了,比如下面的SQL用來計算當前時刻和出生日期FBirthday之間的時間間隔(小時、分以及秒):

SELECT (SYSDATE-FBirthday)*24, (SYSDATE-FBirhday)*24*60, (SYSDATE-FBirthday)*24*60*60 FROM T_Person

 

下面的SQL語句用來計算當前時刻和出生日期FBirthday之間的周間隔:

SELECT SYSDATE, FBirthday, (SYSDATE-FBirthday)/7 FROM T_Person

可以從執行結果看到,計算結果含有非常精確的小數部分,不過如果對這些小數部分沒有需求的話,可以使用數值函式進行四捨五入、取最大整數等處理。比如下面的SQL用計算當前時刻和出生日期FBirthday之間的時間間隔(小時、分以及秒),並且對計算結果進行四捨五入:

SELECT ROUND((SYSDATE-FBirthday)*24), ROUND((SYSDATE-FBirthday)*24*60), ROUND((SYSDATE-FBirthday)*24*60*60) FROM T_Person

 

 

相關文章