1. 程式人生 > >一步一步學MySQL---18 MySQL常用函式(3)

一步一步學MySQL---18 MySQL常用函式(3)

18.3 日期和時間函式

MySQL所支援的日期和時間函式有:

函式 功能
CURDATE() 獲取當前日期
CURTIME() 獲取當前時間
NOW() 獲取當前的日期和時間
UNIX_TIMESTAMP() 獲取日期date的UNIX時間戳
FROM_UNIXTIME() 獲取UNIX時間戳的日期值
WEEK(date) 獲取日期date為一年中的第幾周
YEAR(date) 返回日期date的年份
HOUR(time) 返回時間time的小時值
MINUTE(time) 返回時間time的分鐘值
MONTHNAME(date) 返回時間time的月份值

18.3.1 獲取當前日期和時間

MySQL中可以通過4個函式來獲取當前日期和時間,它們分別是NOW()CURRENT_TIMESTAMP()LOCALTIME()

SYSDATE(),這四個函式不僅可以獲取當前日期和時間,而且顯示的格式也一樣。不過具體使用中,推薦使用NOW()

例如:

mysql> select now() NOW方式,current_timestamp() timestamp方式,localtime() localtime方式,sysdate() systemdate方式;

這裡寫圖片描述

18.3.2 獲取當前日期

MySQL中可以通過2個函式來獲取當前日期,它們分別是CURDATE()CURRENT_DATE(),推薦使用CURDATE()

例如:

mysql> select curdate() CURDATE方式, current_date() CURRENT_DATE方式;

這裡寫圖片描述

18.3.3 獲取當前時間

MySQL中可以通過2個函式來獲取當前日期,它們分別是CURTIME ()CURRENT_TIME(),推薦使用CURTIME()

例如:

mysql> select curtime() CURTIME方式, current_time() CURRENT_TIME方式;

這裡寫圖片描述

18.3.4 通過UNIX方式顯示日期和時間

MySQL中可以使用UNIX方式顯示時間。所謂UNIX是指Unix epoch、Unix time、POSIX time或Unix timestamp的縮寫,意為時間戳

根據ISO-8601規範,該方式將顯示從1970年1月1日開始所經過的秒數,即一分鐘表示為UNIX時間戳格式為60秒,一小時表示為UNIX時間戳格式為3600秒,一天表示為UNIX時間戳格式為86400秒。

MySQL提供UNIX_TIMESTAMP()函式返回時間戳格式的時間,FROM_UNIXTIME()函式將時間戳格式時間轉換為普通格式的時間。

例如:

mysql> select now() 當前時間,unix_timestamp(now()) UNIX格式,from_unixtime(unix_timestamp(now())) 普通格式;

這裡寫圖片描述

說明:當UNIX_TIMESTAMP()函式沒有傳入引數時,則會顯示當前日期和時間的時間戳;當UNIX_TIMESTAMP()函式傳入引數時,則顯示傳入時間的時間戳形式。

18.3.5 通過UTC方式顯示日期和時間

MySQL中,也可以使用UTC方式顯示日期和時間。所謂UTC,就是Universal Coordinated Time,即國際協調時間。MySQL提供了兩個函式UTC_DATE()UTC_TIME()來實現日期和時間的UTC格式顯示。

例如:

mysql> select NOW() 當前日期和時間,
-> UTC_DATE() UTC日期,
-> UTC_TIME() UTC時間;

這裡寫圖片描述

說明:從上面的結果可以看出,UTC_DATE()函式返回的日期和當前日期相同,而UTC_TIME()返回的時間與當前時間相差8個時區。

18.3.6 通過日期和時間各部分值

MySQL中,YEAR()返回日期中的年份;QUARTER()返回日期屬於第幾個季度;MONTH()返回日期屬於第幾個月;WEEK()返回日期屬於第幾個星期;DAYOFMONTH()返回日期屬於當前月的第幾天;HOUR()返回時間的小時部分;MINUTE()返回時間的分鐘部分;SECOND()返回時間的秒。

例如:

mysql> select NOW() 當前日期和時間,
-> YEAR(NOW()) 年,
-> QUARTER(NOW()) 季度,
-> MONTH(NOW()) 月,
-> WEEK(NOW()) 星期,
-> DAYOFMONTH(NOW()) 天,
-> HOUR(NOW()) 小時,
-> MINUTE(NOW()) 分,
-> SECOND(NOW()) 秒;

這裡寫圖片描述

mysql> select NOW() 當前日期和時間,
-> MONTH(NOW()) 月,
-> MONTHNAME(NOW()) 月;

這裡寫圖片描述

mysql> select NOW() 當前日期和時間,
-> WEEK(NOW()) 年中第幾個星期,
-> WEEKOFYEAR(NOW()) 年中第幾個星期,
-> DAYNAME(NOW()) 星期,
-> DAYOFWEEK(NOW()) 星期,
-> WEEKDAY(NOW()) 星期;

這裡寫圖片描述

說明:

  • DAYOFWEEK():返回日期和時間中星期是星期幾,返回值是1~7。如果返回值是1則表示星期日;返回值是2則表示星期一,以此類推。

  • WEEKDAY():返回日期和時間中星期是星期幾,返回值是0~6。如果返回值是0則表示星期一,返回值是1則表示星期二,以此類推。

mysql> select NOW() 當前日期和時間,
-> DAYOFYEAR(NOW()) 年中第幾天,
-> DAYOFMONTH(NOW()) 月中第幾天;

這裡寫圖片描述

注意:如果要獲取日期和時間的各部分值,需要記住上述的各種函式,比較麻煩。MySQL還提供了一個EXTRACT()函式來統一獲取日期和時間的各部分值。

語法:

EXTRACT(type from date)

上述函式會從日期和時間引數date中獲取指定型別引數type的值。關於type引數的取值可以是YEAR、MONTH、DAY、HOUR、MINUTE和SECOND

mysql> select NOW() 當前日期和時間,
-> EXTRACT(YEAR FROM NOW()) 年,
-> EXTRACT(MONTH FROM NOW()) 月,
-> EXTRACT(DAY FROM NOW()) 天,
-> EXTRACT(HOUR FROM NOW()) 小時,
-> EXTRACT(MINUTE FROM NOW()) 分鐘,
-> EXTRACT(SECOND FROM NOW()) 秒;

這裡寫圖片描述

18.3.7 計算日期和時間的函式

MySQL提供了兩種型別的計算日期和時間函式,第一種是計算與預設日期和時間(0000年1月1日)相互操作的函式;第二種是計算與指定日期和時間相互操作的函式。

(1)與預設日期和時間操作

MySQL中提供了兩個函式來實現與預設日期和時間的操作,分別為:TO_DAYS()和FROM_DAYS()。

  • TO_DAYS(date):該函式計算日期引數date與預設日期和時間(0000年1月1日)之間相隔天數;

  • FROM_DAYS(number):該函式計算從預設日期和時間(0000年1月1日)開始經歷number天后的日期和時間。

mysql> select NOW() 當前日期和時間,
-> TO_DAYS(NOW()) 相隔天數,
-> FROM_DAYS(TO_DAYS(NOW())) 一段時間後日期和時間;

這裡寫圖片描述

在具體應用時,有時需要獲取指定兩個日期之間相隔天數,這時就用到了DATEDIFF()函式

語法:

DATEDIFF(date1,date2) //返回date1和date2之間相隔的天數

例如:

mysql> select NOW() 當前日期和時間,
-> DATEDIFF(NOW(),”2012-10-01”) 相隔天數;

這裡寫圖片描述

(2)與指定日期和時間操作

MySQL中提供了兩個函式來實現與指定日期操作,分別為ADDDATE()SUBDATE()函式。

  • ADDDATE(date,n):該函式計算日期引數date加上n天后的日期;

  • SUBDATE(date,n):該函式計算日期引數date減去n天后的日期。

mysql> select CURDATE() 當前日期,
-> ADDDATE(CURDATE(),5) 5天后的日期,
-> SUBDATE(CURDATE(),5) 5天前的日期;

這裡寫圖片描述

ADDDATE()和SUBDATE()函式除了可以接受上述引數以外,還可以接受其他引數,具體如下:

  • ADDDATE(date,INTERVAL expr type):該函式返回日期引數date加上一段時間後的日期,表示式expr決定了時間的長度,引數type決定了所操作的物件;

  • SUBDATE(date,INTERVAL expr type):該函式返回日期引數date減去一段時間後的日期,表示式expr決定了時間的長度,引數type決定了所操作的物件。

關於引數type的取值如下:

type的值 含義 expr表示式
YEAR YY
MONTH MM
DAY DD
HOUR 小時 Hh
MINUTE 分鐘 Mm
SECOND Ss
YEAR_MONTH 年和月 YY與MM之間用任意符號隔開
DAY_HOUR 日和小時 DD與hh之間用任意符號隔開
DAY_MINUTE 日和分鐘 DD與mm之間用任意符號隔開
DAY_SECOND 日和秒 DD與ss之間用任意符號隔開
HOUR_MINUTE 小時和分鐘 hh與mm之間用任意符號隔開
HOUR_SECOND 小時和秒 hh與ss之間用任意符號隔開
MINUTE_SECOND 分鐘和秒 mm與ss之間用任意符號隔開

例如:

mysql> select CURDATE() 當前日期,
-> ADDDATE(CURDATE(),INTERVAL ‘2,3’ YEAR_MONTH) 2年3個月後的日期,
-> SUBDATE(CURDATE(),INTERVAL ‘2,3’ YEAR_MONTH) 2年3個月前的日期;

這裡寫圖片描述

MySQL中除了可以通過ADDDATE()和SUBDATE()函式來操作指定日期外,還可以通過ADDTIME()和SUBTIME()函式實現操作時間

  • ADDTIME(time,n):該函式計算引數time加上n秒後的時間;

  • SUNTIME(time,n):該函式計算引數time減去n秒後的時間。

例如:

mysql> select CURTIME() 當前時間,
-> ADDTIME(CURTIME(),5) 5秒後的時間,
-> SUBTIME(CURTIME(),5) 5秒前的時間;

這裡寫圖片描述