这里总结一下mysql中日期常用函数:
1、NOW():返回但前日期和时间,格式yyyy-mm-dd hh:mm:ss
SELECT NOW();
+---------------------+
| now() |
+---------------------+
| 2016-01-20 21:06:20 |
+---------------------+
2、CURDATE():返回但前日期,格式 yyyy-mm-dd
SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2016-01-20 |
+------------+
3、 CURTIME():返回当前时间,格式 hh:mm:ssSELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 21:11:19 |
+-----------+
4、 DATE(datetime):提取日期时间格式中的日期,格式 yyyy-mm-ddSELECT DATE(NOW());
+-------------+
| DATE(NOW()) |
+-------------+
| 2016-01-20 |
+-------------+
5、 EXTRACT(xxxx FROM datetime):返回日期时间中的单独部分xxxx选项:
YEAR、MONTH、DAY、WEEK、HOUR、MINUTE、SECOND、YRAY_MONTH、DAY_HOUR、DAY_MINUTE、DAY_SECOND、DAY_MICROSECOND、HOUR_MINUTE、HOUR_SECOND、MINUTE_SECOND、MINUTE_MICROSECOND、QUARTER、MICROSECOND
SELECT EXTRACT(YEAR FROM NOW()),EXTRACT(MONTH FROM NOW()),EXTRACT(DAY FROM NOW()),EXTRACT(WEEK FROM NOW());
+--------------------------+---------------------------+-------------------------+--------------------------+
| EXTRACT(YEAR FROM NOW()) | EXTRACT(MONTH FROM NOW()) | EXTRACT(DAY FROM NOW()) | EXTRACT(WEEK FROM NOW()) |
+--------------------------+---------------------------+-------------------------+--------------------------+
| 2016 | 1 | 20 | 3 |
+--------------------------+---------------------------+-------------------------+--------------------------+
6、 DATE_ADD(datetime,INTERVAL expr type):向日期添加指定间隔添加间隔类型type参数:
同EXTRACT()中xxxx
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY); 天数加一
+--------------------------------+
| DATE_ADD(NOW(),INTERVAL 1 DAY) |
+--------------------------------+
| 2016-01-21 21:40:25 |
+--------------------------------+
7、 DATE_SUB(datetime,INTERVAL expr type),使用同上,只不过是减一8、DATEDIFF(date1,date2) 返回两个日期之间的天差数,date1-date2 只有日期参加计算
SELECT DATEDIFF(NOW(),DATE_ADD(NOW(),INTERVAL 1 DAY));
+------------------------------------------------+
| DATEDIFF(NOW(),DATE_ADD(NOW(),INTERVAL 1 DAY)) |
+------------------------------------------------+
| -1 |
+------------------------------------------------+
9、 DATE_FORMAT(datetime,format):将日期时间按指定格式显示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 位 |
SELECT DATE_FORMAT(NOW(),'%Y%m%d');
+-----------------------------+
| DATE_FORMAT(NOW(),'%Y%m%d') |
+-----------------------------+
| 20160120 |
+-----------------------------+
10、Mysql中日期存储格式DATE:YYYY-MM-DD
DATETIME:YYYY-MM-DD HH:MM:SS
DATESTAMP:YYYY-MM-DD HH:MM:SS
YEAR:YYYY或YY
11、最后加一个企业应用:数据库中mo月作为partition,mo的计算方式是:年*12+月份,比如2016-01-21 为2016*12+1=24193,这时候需要考虑获取这个值了,并且这个是每天早上跑的是昨天的数据:
substr(date_format(date_sub(curdate(),interval 1 day),%Y%m),1,4)+substr(date_format(date_sub(curdate(),interval 1 day),%Y%m),5,2)