MySql 常用日期时间函数

时间:2022-09-22 16:55:15
/*
date_add(date,interval expr type)和date_sub(date,interval expr type)执行日期运算。 date 是一个 datetime 或date值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。  expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-’开头。 type 为关键词,它指示了表达式被解释的方式。  
关键词interva及 type 分类符均不区分大小写。 

日期操作,adddate就是date_add的同义词。如果adddate没有指定interval,则默认将天数作为interval(date_add不行)
*/
select date_add( ' 2011-01-01 ',interval  30  day),date_add( ' 2011-01-01 ',interval  - 1  day),adddate( ' 2011-01-01 ',interval  30   day),adddate( ' 2011-01-01 ', 30),date_sub( ' 2011-01-01 ',interval  1  day),subdate( ' 2011-01-01 ',interval  1  day);

--  时间操作
select addtime( ' 2011-01-01 00:00:00 ', ' 1:05:33 '),addtime( ' 00:00:00 ', ' 1:05:33 ');

--  获取当前日期,+0以后会去掉分割线,current_date和curdate是同义词
select curdate() ,curdate()  + 0, current_date();

--  获取当前时间,curtime和current_time是同义词
select curtime(), current_time(), current_time() + 0;

--  查询当前的服务器时区和当前连接的时区,当前连接的时区初使值与全局变量time_zone相同,但可以用下面的语句重设:set time_zone = timezone;
select  @@global.time_zone,  @@session .time_zone;

--  指定时区转换
select convert_tz( ' 2004-01-01 12:00:00 ', ' +08:00 ', ' +00:00 ');

--  获取当前日期和时间,current_timestamp和now是同义词
select  current_timestamp(),now(),now() + 0, current_timestamp() + 0;

--  提取日期或时间日期表达式expr中的日期部分。 
select date( ' 2003-12-31 01:02:03 ');

 
--  datediff(expr,expr) ,返回expr减去expr2之间的天数。expr和expr2 为日期或 date-and-time 表达式。计算中只用到这些值的日期部分。
select  datediff( ' 1997-12-31 23:59:59 ', ' 1997-12-30 '), datediff( ' 1997-11-30 23:59:59 ', ' 1997-12-31 ');

/*
mysql 允许任何expr 格式中的标点分隔符。表中所显示的是建议的 分隔符。若 date 参数是一个 date 值,而你的计算只会包括 year、month和day部分(即, 没有时间部分), 其结果是一个date 值。否则,结果将是一个 datetime值。

若位于另一端的表达式是一个日期或日期时间值 , 则interval expr type只允许在 + 操作符的两端。对于 –操作符,  interval expr type 只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。 (见下面的例子)。 
*/
select  ' 1997-12-31 '  + interval  1 second,  ' 1997-12-31 '  - interval  1 second, ' 1997-12-31 23:59:59 '  + interval  1 second,interval  1   day  +  ' 1997-12-31 ', ' 1998-01-01 '  - interval  1 second;

--  interval 还可以使用负值
select  ' 1997-12-31 '  +  interval  - 1  day;

--  时间日期格式化函数  date_format(date,format) 
select date_format(now(), ' %y-%m-%d %h:%i:%s ');

--  常用获取日期中某部分的函数
select  day(now()),dayname(now()),dayofweek(now()),dayofyear(now())

--  extract(type from date) 
--
 extract()函数所使用的时间间隔类型说明符同 date_add()或date_sub()的相同,但它从日期中提取其部分,而不是执行日期运算。  
--
 获取月份,天数,不满10不会自己加0
select extract( year  from  ' 1999-07-02 '),extract( month  from  ' 1999-07-02 ');