一步一步學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()
例如:
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秒前的時間;