5.3日期和时间函数
函数名称 |
功能 |
NOW() |
返回当前的日期和时间 |
SYSDATE() |
|
UTC_TIMESTAMP() |
|
UTC_DATE() |
|
UTC_TIME() |
|
CURDATE() |
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。 |
CURTIME() |
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。 |
YEAR(date) |
返回日期date的年份。 |
QUARTER(date) |
返回date一年中的季度,范围1到4。 |
MONTH(date) |
返回date的月份,范围1到12。 |
DATE(date) |
返回date的日期。 |
HOUR(time) |
返回time的小时。 |
MINUTE(time) |
返回time的分钟。 |
SECOND(time) |
返回time的秒数。 |
MONTHNAME(date) |
返回date的月份英文名字。 |
DAYNAME(date) |
返回date的星期英文名字。 |
DAYOFMONTH(date) |
返回date的月份中日期,在1到31范围内。 |
DAYOFYEAR(date) |
返回date在一年中的日数, 在1到366范围内。 |
DAYOFWEEK(date) |
返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) |
WEEKDAY(date) |
返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 |
WEEK(date) |
返回日期date为一年中的的第几周,对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。 |
WEEK(date,first) |
返回日期date为一年中的的第几周,2个参数形式的WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。 |
UNIX_TIMESTAMP(date) |
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME 字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。 |
FROM_UNIXTIME(unix_timestamp,format) |
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。 |
DATE_FORMAT(date, fmt) |
返回按字符串fmt格式化日期date的值 |
TIME_FORMAT(time,format) |
类DATE_FORMAT(),但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。 |
TO_DAYS(date) |
给定一个日期date, 返回一个天数 (从年份0开始的天数 )。 |
DATE_ADD(略) |
(date, INTERVAL expr type)返回一个日期或时间值加上一个日期间隔的时间值 |
DATE_SUB(略) |
(date,INTERVAL expr type))返回一个日期或时间值减去一个日期间隔的时间值 |
DATEDIFF(expr, expr2) |
返回起始时间expr和结束时间expr2之间的天数 |
TIMESTAMPADD(略) |
(interval, int_expr, datetime_expr)将整型表达式int_expr添加到日期或日期时间表达式datetime_expr中。 int_expr的单位被时间间隔参数interval给定,该参数必须是以下值的其中一个: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、MONTH、 QUARTER或 YEAR。 |
TIMESTAMPDIFF(略) |
(interval,datetime_expr1,datetime_expr2)返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval参数给出。 |
举例 |
结果 |
select NOW(); |
2012-06-02 12:56:23(参见CURDATE()举例的+0略) |
select SYSDATE() ; |
2012-06-02 12:54:54(参见CURDATE()举例的+0) |
select DAYOFWEEK('2012-05-31'); |
5(星期四) |
select WEEKDAY('2012-05-31'); |
3(星期四) |
select CURDATE(); |
2012-06-02 |
select CURDATE() + 0; |
20120602 |
select YEAR('2012-06-02'); |
2012 |
select QUARTER('2012-06-02'); |
2 |
select MONTH('2012-06-02'); |
6 |
select DATE(now()); |
2012-06-02 |
select HOUR('10:05:03'); |
10 |
select MINUTE('11:50:02'); |
50 |
select SECOND('11:50:02'); |
02 |
select MONTHNAME('2012-06-02'); |
June |
select DAYNAME("2012-06-02"); |
'Saturday' |
select DAYOFMONTH('2012-05-31'); |
31 |
select DAYOFYEAR('2012-05-31'); |
152 |
select UNIX_TIMESTAMP('2012-06-02'); |
1338566400 |
select FROM_UNIXTIME(1338566400, '%Y-%m-%d %H:%i'); |
2012-06-02 00:00 |
select DATE_FORMAT('2012-06-02 12:08:45', '%Y-%m-%d'); |
2012-06-02 |
select TO_DAYS('2012-05-31') - TO_DAYS(NOW()); |
-2 |
select DATEDIFF('2012-06-02', '2012-05-31'); |
2 |
select DATEDIFF('2012-05-31', '2012-06-02'); |
-2 |
MySql中的日期时间格式(
DATE_FORMAT(date, fmt))
说明符 |
说明 |
举例 |
%a |
工作日的缩写名称(Sun, Mon, ..., Sat) |
|
%b |
月份的缩写名称(Jan~Dec) |
|
%c |
月份,数字形式(0~12) |
|
%D |
带有英语后缀的该月日期 (0th,1st, 2nd,3rd, ...) |
|
%d |
该月日期,数字形式 (00~31) |
|
%e |
该月日期,数字形式(0~31) |
|
%f |
微秒 (000000~999999) |
|
%H |
小时(00~23) |
同%k, %Y-%m-%d %H:%i:%s |
%h 或 %I |
小时(01~12) |
|
%i |
分钟,数字形式 (00~59) |
|
%j |
一年中的天数 (001~366) |
|
%k |
小时 (0~23) |
同%H, %Y-%m-%d %k:%i:%s |
%l |
小时 (1~12) |
|
%M |
月份名称 (January~December) |
|
%m |
月份,数字形式 (00~12) |
|
%p |
上午(AM)或下午( PM) |
|
%r |
时间 , 12小时制 (小时hh:分钟mm:秒数ss后加 AM或PM) |
|
%S 或 %s |
秒 (00~59) |
|
%T |
时间 , 24小时制 (小时hh:分钟mm:秒数ss) |
|
%U |
周 (00~53),其中周日为每周的第一天 |
|
%u |
周 (00~53),其中周一为每周的第一天 |
|
%V |
周 (01~53),其中周日为每周的第一天 ;和%X同时使用 |
DATE_FORMAT('2012-06-02 12:08:45', '%X %V'); 2012 22 |
%v |
周 (01~53),其中周一为每周的第一天 ;和%x同时使用 |
|
%W |
一周中每一天的名称(Sunday, Monday, ..., Saturday) |
select DATE_FORMAT('2012-06-02 12:08:45', '%W'); Saturday |
%w |
以数字形式表示周中的天数(0 = Sunday, 1 = Monday, ..., 6 = Saturday) |
'%w'则输出为6 |
%X |
该周的年份,其中周日为每周的第一天,数字形式,4位数;和%V同时使用 |
DATE_FORMAT('2012-06-02 12:08:45', '%X %V'); 2012 22 |
%x |
该周的年份,其中周一为每周的第一天,数字形式,4位数;和%v同时使用 |
|
%Y |
年份,数字形式,4位数 |
|
%y |
年份,数字形式 (2位数) |
|
%% |
‘%’文字字符 |
|
//注:visit-time不可用单引号或双引号等限定。
select DATE_FORMAT(visit_time, '%Y-%m-%d') from t_visit_result;
MySql中的日期间隔类型
DATE_ADD(date, INTERVAL expr type)
表达式类型(type) |
描述 |
格式(expr) |
YEAR |
年 |
YY |
QUARTER |
季度 |
|
MONTH |
月 |
MM |
WEEK |
周 |
|
DAY |
日 |
DD |
HOUR |
小时 |
hh |
MINUTE |
分 |
mm |
SECOND |
秒 |
ss |
MICROSECOND |
微秒 |
|
YEAR_MONTH |
年和月 |
YY_MM |
DAY_HOUR |
日和小时 |
DD hh |
DAY_MINUTE |
日和分钟 |
DD hh:mm |
DAY_SECOND |
日和秒 |
DD hh:mm:ss |
HOUR_MINUTE |
小时和分 |
hh:mm |
HOUR_SECOND |
小时和秒 |
hh:ss |
MINUTE_SECOND |
分钟和秒 |
mm:ss |
DAY_MICROSECOND |
日和微秒 |
DD hh:mm:ss.fff |
HOUR_MICROSECOND |
小时和微秒 |
hh:mm:ss.fff |
MINUTE_MICROSECOND |
分和微秒 |
mm ss.fff |
SECOND_MICROSECOND |
秒和微秒 |
ss.fff |
说明:
下面传入的均为正的整数值,若希望减去相应的值,则传入负数即可。
select now(); |
2012-06-02 16:45:53 |
select DATE_ADD(now(), INTERVAL 1 YEAR); |
2013-06-02 16:45:53 |
select DATE_ADD(now(), INTERVAL 2 QUARTER); |
2012-12-02 16:45:53 ## 加两个季度 |
select DATE_ADD(now(), INTERVAL '1_2' YEAR_MONTH); |
## 加1年两个月2013-08-02 16:45:53 |
|
select DATE_ADD(now(), INTERVAL '1_26' DAY_HOUR); |
## 加1天26个小时 2012-06-04 18:45:53 |
select DATE_ADD(now(), INTERVAL '1 2:10:30' DAY_SECOND); |
## 加1天2小时10分钟30秒2012-06-03 |
select DATE_ADD(now(), INTERVAL '3:10' HOUR_MINUTE); |
2012-06-02 19:55:54 |
SELECT visit_time, TO_DAYS(UTC_DATE()) - TO_DAYS(visit_time) AS '间隔'
FROM t_visit_result
WHERE is_delete = '0' order by visit_result_id limit 0, 5;
SELECT visit_time, TIMESTAMPDIFF(DAY, DATE_FORMAT(visit_time, '%Y-%m-%d'), UTC_DATE()) AS '间隔'
FROM t_visit_result
WHERE is_delete = '0' order by visit_result_id limit 0, 5;
SELECT visit_time, TIMESTAMPDIFF(WEEK, DATE_FORMAT(visit_time, '%Y-%m-%d'), UTC_DATE()) AS '间隔'
FROM t_visit_result
WHERE is_delete = '0' order by visit_result_id limit 0, 5;
## visit_time : 2012-05-03 10:11:24
## UTC_DATE : 2012-06-05
## SQL 结果:
## visit_time | 间隔
## 2012-05-03 10:11:24 | 4
## 说明:
## 2012-05-03为周四 2012-05-06为周日
## 2012-05-13为周日
## 2012-05-20为周日
## 2012-05-27为周日
## 2012-06-03为周日 2012-06-05为周二
##
SELECT visit_time, TIMESTAMPADD(MONTH, 2, visit_time) as 'NewVisitTime'
FROM t_visit_result
WHERE is_delete = '0' order by visit_result_id limit 0, 5;
##TIMESTAMPADD(WEEK, 2, visit_time) 2012-05-03 10:11:24 2012-05-17 10:11:24
##TIMESTAMPADD(MONTH, 2, visit_time) 2012-05-03 10:11:24 2012-07-03 10:11:24
##TIMESTAMPADD(MONTH, -2, visit_time) 2012-05-03 10:11:24 2012-03-03 10:11:24