在說MySQL的時間函數之前,先把MySQL的時間類型字段大概熟悉一下,這樣對于MySQL時間函數的了解就更好啦。
MySQL有以下的時間類型:
datetime '0000-00-00 00:00:00'
date '0000-00-00'
timestamp '0000-00-00 00:00:00'
time '00:00:00'
year 0000
datetime 顯示為'YYYY-MM-DD HH:MM:SS'格式,範圍為'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
date 顯示為'YYYY-MM-DD'格式,範圍為'1001-01-01'到'9999-12-31'
timestamp 範圍從'1970-01-01 00:00:01'UTC 到'2038-01-09 03:14:07'UTC
指定datetime值時,可以用'2009-01-01 11:20:30','2009/01/01 11*20*30','2009*01*01 11^20^30','2009@01@01 11+20+30'等,效果是一樣的。此外,如果使用字元串如'20090101112030'或'090101112030'或者使用數字也是可以的,如20090101112030或090101112030。
指定datetime、date或timestamp值時,月、日、時、分、秒,若小于10,可以隻寫1位,如'2009-01-01 11:30:30'與'2009-1-1 11:30:30'一樣。
----------------------------------------------------以上為分享整理的内容-------------------------------------------------------------------------------------------------
MySQL Curdate()函數
CURDATE() 函數傳回目前的日期。
mysql> select curdate();
+------------+
| curdate() |
| 2011-07-08 |
1 row in set (0.02 sec)
MySQL Now()函數
NOW() 函數傳回目前的日期和時間。
mysql> select now();
+---------------------+
| now() |
| 2011-07-08 09:43:01 |
1 row in set (0.01 sec)
MySQL curtime()函數
CURTIME() 函數傳回目前的時間。
mysql> select curtime();
+-----------+
| curtime() |
| 09:44:11 |
curdate()&Now()&curtime()比較
mysql> select curdate(),now(),curtime();
+------------+---------------------+-----------+
| curdate() | now() | curtime() |
| 2011-07-08 | 2011-07-08 09:40:27 | 09:40:27 |
MySQL date()函數
DATE() 函數傳回日期或日期/時間表達式的日期部分。
如果我們的表如下:
mysql> select * from product;
+---------+-------------+---------------------+
| orderid | productname | ordertime |
| 1 | mouse | 2011-07-08 09:48:43 |
1 row in set (0.00 sec)
那麼我們使用date函數的查詢結果為:
mysql> select orderid,productname,date(ordertime) from product;
+---------+-------------+-----------------+
| orderid | productname | date(ordertime) |
| 1 | mouse | 2011-07-08 |
MySQL Extract()函數
EXTRACT() 函數用于傳回日期/時間的單獨部分,比如年、月、日、小時、分鐘等等。
EXTRACT(unit FROM date)
unit值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
那麼我們使用extract函數的查詢結果為:
mysql> select extract(year from ordertime) as year,
-> extract(month from ordertime) as month,
-> extract(day from ordertime) as day
-> from product;
+------+-------+------+
| year | month | day |
| 2011 | 7 | 8 |
MySQL Date_Add()函數
DATE_ADD() 函數向日期添加指定的時間間隔。
DATE_ADD(date,INTERVAL expr type)
date 參數是合法的日期表達式。expr 參數是希望添加的時間間隔。type跟上述的unit一樣。
| 1 | mouse | 2011-07-10 09:48:43 |
那麼我們使用date_add函數的查詢結果為:
mysql> select orderid,date_add(ordertime,interval 2 minute) as newordertime
+---------+---------------------+
| orderid | newordertime |
| 1 | 2011-07-08 09:50:43 |
MySQL Date_SUB()
DATE_SUB() 函數從日期減去指定的時間間隔。
DATE_SUB(date,INTERVAL expr type)
date 參數是合法的日期表達式。expr 參數是希望減去的時間間隔。type跟上述的unit一樣。
| 1 | mouse | 2011-07-08 09:50:43 |
那麼我們使用date_sub函數的查詢結果為:
mysql> select orderid,date_sub(ordertime,interval 2 day) as newordertime
| orderid | newordertime |
| 1 | 2011-07-06 09:48:43 |
MySQL DateDiff()函數
DATEDIFF() 函數傳回兩個日期之間的天數。DATEDIFF(date1,date2),date1 和 date2 參數是合法的日期或日期/時間表達式。
mysql> select datediff('2011-2-3','2011-9-6') as datediff;
+----------+
| datediff |
| -215 |
mysql> select datediff('2011-9-3','2011-5-6') as datediff;
| 120 |
MySQL Date_format()函數
DATE_FORMAT() 函數用于以不同的格式顯示日期/時間資料。DATE_FORMAT(date,format),date 參數是合法的日期。format 規定日期/時間的輸出格式。
可以使用的格式有:
%a
縮寫星期名
%b
縮寫月名
%c
月,數值
%D
帶有英文字首的月中的天
%d
月的天,數值(00-31)
%e
月的天,數值(0-31)
%f
微秒
%H
小時 (00-23)
%h
小時 (01-12)
%I
%i
分鐘,數值(00-59)
%j
年的天 (001-366)
%k
小時 (0-23)
%l
小時 (1-12)
%M
月名
%m
月,數值(00-12)
%p
AM 或 PM
%r
時間,12-小時(hh:mm:ss AM 或 PM)
%S
秒(00-59)
%s
%T
時間, 24-小時 (hh:mm:ss)
%U
周 (00-53) 星期日是一周的第一天
%u
周 (00-53) 星期一是一周的第一天
%V
周 (01-53) 星期日是一周的第一天,與 %X 使用
%v
周 (01-53) 星期一是一周的第一天,與 %x 使用
%W
星期名
%w
周的天 (0=星期日, 6=星期六)
%X
年,其中的星期日是周的第一天,4 位,與 %V 使用
%x
年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y
年,4 位
%y
年,2 位
mysql> select date_format(now(),'%b %d %Y %h:%i %p') as newformat;
+----------------------+
| newformat |
| Jul 08 2011 10:29 AM |
mysql> select date_format(now(),'%c %D %Y %u %W') as new;
| new |
| 7 8th 2011 27 Friday |