目录
MySQL 日期与时间方面的函数
获得当前日期
时间转换
MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)
MySQL (日期、天数)转换函数:to_days(date), from_days(days)
MySQL (时间、秒)转换函数:time_to_sec(time), sec_to_time(seconds)
MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)
MySQL (Unix 时间戳、日期)转换函数
FROM_UNIXTIME(unix_timestamp,format),DATE_FORMAT(date,format)中format
MySQL 日期时间计算函数
MySQL 为日期增加一个时间间隔:date_add()
MySQL 为日期减去一个时间间隔:date_sub()
DATE_ADD(date,INTERVAL expr unit) 与 DATE_SUB(date,INTERVAL expr unit)
MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。
MySQL 时间戳(timestamp)转换、增、减函数:
MySQL 时区(timezone)转换函数
MySQL 日期与时间方面的函数
获得当前日期
select now(),current_timestamp(),current_timestamp,CURDATE(),CURTIME();
时间转换
MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)
select str_to_date('08/09/', '%m/%d/%Y'); -- -08-09select str_to_date('08/09/08' , '%m/%d/%y'); -- -08-09select str_to_date('08.09.', '%m.%d.%Y'); -- -08-09select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30select str_to_date('08.09. 08:09:30', '%m.%d.%Y %h:%i:%s'); -- -08-09 08:09:30
MySQL (日期、天数)转换函数:to_days(date), from_days(days)
select to_days('0000-00-00'); -- 0select to_days('-08-08'); -- 733627
MySQL (时间、秒)转换函数:time_to_sec(time), sec_to_time(seconds)
select time_to_sec('01:00:05'); -- 3605select sec_to_time(3605); -- '01:00:05'
MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)
select makedate(2001,31); -- '2001-01-31'select makedate(2001,32); -- '2001-02-01'select maketime(12,15,30); -- '12:15:30'
MySQL (Unix 时间戳、日期)转换函数
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)
下面是示例:
select unix_timestamp(); -- 1218290027select unix_timestamp('-08-08'); -- 1218124800select unix_timestamp('-08-08 12:30:00'); -- 1218169800select from_unixtime(1218290027); -- '-08-09 21:53:47'select from_unixtime(1218124800); -- '-08-08 00:00:00'select from_unixtime(1218169800); -- '-08-08 12:30:00'
FROM_UNIXTIME(unix_timestamp,format),DATE_FORMAT(date,format)中format
下表中列出了一些可用于 format 字符串的标识符。格式标识符第一个字符必须是%
字符。
MySQL 日期时间计算函数
MySQL 为日期增加一个时间间隔:date_add()
set @dt = now();select date_add(@dt, interval 1 day); -- add 1 dayselect date_add(@dt, interval 1 hour); -- add 1 hourselect date_add(@dt, interval 1 minute); -- ...select date_add(@dt, interval 1 second);select date_add(@dt, interval 1 microsecond);select date_add(@dt, interval 1 week);select date_add(@dt, interval 1 month);select date_add(@dt, interval 1 quarter);select date_add(@dt, interval 1 year);
MySQL 为日期减去一个时间间隔:date_sub()
DATE_ADD(date,INTERVAL expr unit) 与 DATE_SUB(date,INTERVAL expr unit)
执行日期计算的两种函数。date
是一个用来指定开始日期的 DATETIME 或 DATE 值。expr
是一种以字符串形式呈现的表达式,用来指定从开始日期增加或减少的间隔值。如果是负的间隔值,则expr
值的第一个字符是-
号。unit
是一个单位关键字,用来指定expr表达式应该采取的单位。
INTERVAL 关键字与单位说明符都不区分大小写。
下表列出了每个单位数值所对应的 expr 参数的期望格式。
MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
-- datediff(date1,date2):两个日期相减 date1 - date2,返回天数。select datediff('-08-08', '-08-01'); -- 7select datediff('-08-01', '-08-08'); -- -7
MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。
select timediff('-08-08 08:08:08', '-08-08 00:00:00'); -- 08:08:08select timediff('08:08:08', '00:00:00'); -- 08:08:08
注意:timediff(time1,time2) 函数的两个参数类型必须相同。
MySQL 时间戳(timestamp)转换、增、减函数:
timestamp(date) -- date to timestamptimestamp(dt,time) -- dt + timetimestampadd(unit,interval,datetime_expr) --timestampdiff(unit,datetime_expr1,datetime_expr2) --
请看示例部分:
select timestamp('-08-08'); -- -08-08 00:00:00select timestamp('-08-08 08:00:00', '01:01:01'); -- -08-08 09:01:01select timestamp('-08-08 08:00:00', '10 01:01:01'); -- -08-18 09:01:01select timestampadd(day, 1, '-08-08 08:00:00'); -- -08-09 08:00:00select date_add('-08-08 08:00:00', interval 1 day); -- -08-09 08:00:00-- timestampadd() 函数类似于 date_add()。select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485select timestampdiff(hour,'-08-08 12:00:00','-08-08 00:00:00'); -- -12select datediff('-08-08 12:00:00', '-08-01 00:00:00'); -- 7
MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数。
MySQL 时区(timezone)转换函数
-- convert_tz(dt,from_tz,to_tz)select convert_tz('-08-08 12:00:00', '+08:00', '+00:00'); -- -08-08 04:00:00
时区转换也可以通过 date_add, date_sub, timestampadd 来实现。
select date_add('-08-08 12:00:00', interval -8 hour); -- -08-08 04:00:00select date_sub('-08-08 12:00:00', interval 8 hour); -- -08-08 04:00:00select timestampadd(hour, -8, '-08-08 12:00:00'); -- -08-08 04:00:00
参考链接:/project/mysql/useful-functions/time-functions.html