SQL 10 函數 3 日期時間函數 - 4 日期增減(MySQL)

有時我們需要在一個日期的基礎殺那個增加某個時間長度或者減去某個時間長度,比如我們知道每個員工的出生日期,而想計算出他出生後10000填的日期,再如我們想計算所有合同到期的3個月後的日期。由於存在每個月天數不同、閏月等複雜的立法規則,所以本鞥使用簡單地數字加減發進行計算,主流的數據庫系統中都提供了對日期增減的計算下面分別進行介紹。

1. MySQL

MySQL中提供的DATE_ADD() 函數用於進行日期時間的加法運算,這個函數還有一個別名爲ADDDATE(), DATE_ADD()函數的參數格式如下:

DATE_ADD(date, INTERVAL, expr type)

其中參數date爲待計算的日期;參數expr爲待進行加法運算的增量,它可以說數值類型或者字符串類型,取決於type參數的取值;參數type則爲進行加法運算的單位。type參數可選值;參數type則爲進行加法運算的單位。type參數可選值及對應的expr參數的格式如下表所示:

Type 參數值

Expr 參數格式

說明

MICROSECOND

數值類型

以微秒爲計算單位

MINUTE

數值類型

以秒爲單位

HOUR

數值類型

以小時爲單位

DAY

數值類型

以天爲單位

WEEK

數值類型

以周爲單位

MONTH

數值類型

以月爲單位

QUARTER

數值類型

以季度爲單位

YEAR

數值類型

以年爲單位

HOUR_MINUTE

字符串類型,格式爲:

‘HOURS:MINUTES’

以秒小時、分鐘爲計算單位,要求 expr參數必須是“小時 :分”的格式,比如“ 30:10”增加 30小時 10分鐘

DAY_HOUR

字符串類型,格式爲:

‘DAYS HOURS’

以天、小時爲計算單位,要求 expr參數必須是“天 小時”的格式,比如“ 30 10”表示增加 30 10小時

YEAR_MONTH

字符串類型,格式爲:

‘YEARS-MONTHS’

以年、月爲計算單位,要求 expr參數必須是“年 -月”的格式,比如“ 2-8”表示增加 2 8個月

 

表中前9種用法都非常簡單,比如DATE_ADD(date, INTERVAL 1 HOUR)就可以得到在日期date基礎上增加一小時後的日期時間。

下面的SQL語句用來計算每個人出生一週、兩個月及5個季度後的日期:

SELECT FBirthday,

DATE_ADD(FBirthday, INTERVAL 1 WEEK) as w1,

DATE_ADD(FBirthday, INTERVAL 2 MONTH) as m2,

DATE_ADD(FBirthday, INTERVAL 5 QUARTER) as q5

FROM T_Person

比如下面的SQL語句分別結算出生日期後3天2小時10分鐘、6個月的日期時間:

SELECT FBirthdaty, DATE_ADD(FBirthday, INTERVAL '3 2:10' DAY_MINUTE) as dm,

DATE_ADD(FBirthday, INTERVAL '1-6' YEAR_MONTH) as ym

FROM T_Person

 

幾乎所有版本的MySQL都支持DATE_ADD()函數的前9中用法,但是MySQL的早期版本不完全支持DATE_ADD()函數的後幾種用法,不過在MySQL的早期版本中可以嵌套調用DATE_ADD()函數來實現後幾種用法的效果。下面的SQL語句使用嵌套函數的方式來分別計算出生日期後1年6個月的日期時間:

SELECT FBirthday, DATE_ADD(DATE_ADD(FBirthday, INTERVAL 1 YEAR), INTERVAL 6 MONTH) as dm FROM T_Person

 

DATE_ADD()函數不僅可以用來做日期基礎上增加指定的時間段,而且還可以在日期的基礎上減少指定的時間段,只要在expr參數中使用負數就可以了。下面SQL語句用來計算每個人出生一週、兩個月及5個季度前的日期:

SELECT FBirthday, DATE_ADD(FBirthday, INTERVAL -1 WEEK) as w1, DATE_ADD(FBirthday, INTERVAL -2 MONTH) as m2, DATE_ADD(FBirthday, INTERVAL -5 QUARTER) as q5 FROM T_Person

 

在MySQL中提供了DATE_SUB()函數用於計算指定日期前的特定時間段的日期,期效果和在DATE_ADD()函數中使用負數的expr參數的效果一樣,其用法也和DATE_ADD()幾乎相同。下面的SQL語句用來計算每個人出生一週、兩個月及3天2小時1-分鐘前的日期:

SELECT FBirthday, DATE_SUB(FBirthday, INTERVAL 1 WEEK) as w1, DATE_SUB(FBirthday, INTERVAL 2 MONTH) as m2,DATE_SUB(FBirthday, INTERVAL '3 2:10' DAY_MINUTE) as dm FROM T_Person

 

 

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