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

有時候我們需要計算連個日期的差額,比如計算“回款日”和驗收日之間所差的天數,或者檢索所有“最後一次登陸日期”與當前日期的差額大於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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章