在说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 |
+-----------+
1 row in set (0.01 sec)
curdate()&Now()&curtime()比较
mysql> select curdate(),now(),curtime();
+------------+---------------------+-----------+
| curdate() | now() | curtime() |
+------------+---------------------+-----------+
| 2011-07-08 | 2011-07-08 09:40:27 | 09:40:27 |
+------------+---------------------+-----------+
1 row in set (0.01 sec)
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 |
+---------+-------------+-----------------+
1 row in set (0.00 sec)
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 |
如果我们的表如下:
mysql> select * from product;
+---------+-------------+---------------------+
| orderid | productname | ordertime |
+---------+-------------+---------------------+
| 1 | mouse | 2011-07-08 09:48:43 |
+---------+-------------+---------------------+
1 row in set (0.00 sec)
那么我们使用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 |
+------+-------+------+
1 row in set (0.00 sec)
MySQL Date_Add()函数
DATE_ADD() 函数向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是希望添加的时间间隔。type跟上述的unit一样。
如果我们的表如下:
mysql> select * from product;
+---------+-------------+---------------------+
| orderid | productname | ordertime |
+---------+-------------+---------------------+
| 1 | mouse | 2011-07-10 09:48:43 |
+---------+-------------+---------------------+
1 row in set (0.00 sec)
那么我们使用date_add函数的查询结果为:
mysql> select orderid,date_add(ordertime,interval 2 minute) as newordertime
-> from product;
+---------+---------------------+
| orderid | newordertime |
+---------+---------------------+
| 1 | 2011-07-08 09:50:43 |
+---------+---------------------+
1 row in set (0.00 sec)
MySQL Date_SUB()
DATE_SUB() 函数从日期减去指定的时间间隔。
DATE_SUB(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是希望减去的时间间隔。type跟上述的unit一样。
如果我们的表如下:
mysql> select * from product;
+---------+-------------+---------------------+
| orderid | productname | ordertime |
+---------+-------------+---------------------+
| 1 | mouse | 2011-07-08 09:50:43 |
+---------+-------------+---------------------+
1 row in set (0.00 sec)
那么我们使用date_sub函数的查询结果为:
mysql> select orderid,date_sub(ordertime,interval 2 day) as newordertime
-> from product;
+---------+---------------------+
| orderid | newordertime |
+---------+---------------------+
| 1 | 2011-07-06 09:48:43 |
+---------+---------------------+
1 row in set (0.02 sec)
MySQL DateDiff()函数
DATEDIFF() 函数返回两个日期之间的天数。DATEDIFF(date1,date2),date1 和 date2 参数是合法的日期或日期/时间表达式。
mysql> select datediff('2011-2-3','2011-9-6') as datediff;
+----------+
| datediff |
+----------+
| -215 |
+----------+
1 row in set (0.00 sec)
mysql> select datediff('2011-9-3','2011-5-6') as datediff;
+----------+
| datediff |
+----------+
| 120 |
+----------+
1 row in set (0.01 sec)
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 | 小时 (01-12) |
%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 | 秒(00-59) |
%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 |
+----------------------+
1 row in set (0.00 sec)
mysql> select date_format(now(),'%c %D %Y %u %W') as new;
+----------------------+
| new |
+----------------------+
| 7 8th 2011 27 Friday |
+----------------------+
1 row in set (0.02 sec)