日期与时间是比较常见的数据类型,但它们属于组合数据,处理起来相对复杂一些;本文将讨论MySQL数据库中的日期和时间数据类型,以及如何获取日期和时间,如何推算日期和时间,如何格式化日期和时间数据等。
MySQL数据库支持的日期和时间类型包括:
在MySQL代码中使用日期或时间的直接量时,应和字符串一样使用一对单引号定义,如'2026-01-01 12:25:39'、'2026-03-15'、'09:35:59'等。
除了timestamp类型,在数据表中还可以使用一些自动保存和更新数据的时间戳类型,如:
下面介绍一些获取日期和时间信息的函数,首先是获取系统日期和时间的函数:
从数据中提取日期和时间数据时,可以使用下列函数:
此外,截取部分日期和时间信息时还可以使用extract(<类型> from <日期和时间>)函数,其中,<类型>可以指定返回信息的类型,下面是一些可以使用的组合类型:
如下面的代码只返回当前日期的年和月。
select extract(year_month from now());
下面来看几个关于日期和时间计算的函数。
AddDate(expr,interval n unit)函数,其中,参数expr为基础日期;参数2指定推算的单位和数值,如果只使用整数则为推算的天数,如果设置为浮点数则四合五入为整数后计算。此外,Date_Add()、SubDate()和Date_Sub()函数都与AddDate()函数功能相同。
下面两行代码都会返回系统当前日期向后推算3天的日期。
select adddate(curdate(),3); select adddate(curdate(),interval 3 day);
对日期向前推算时可以使用负数,如下面的代码会返回系统日期前3天的日期。
select adddate(curdate(),-3);
推算月份时可以使用month关键字,如下面的代码。
select adddate(curdate(),interval 3 month);
相应的,推算年份则使用year关键字,如下面的代码。
select adddate(curdate(),interval 3 year);
此外,按周推算时使用week关键字,按季度推算时使用quarter关键字。实际上,AddDate()函数不只是推算日期,也可以按时间进行推算,如使用关键字hour、minute、second、microsecond等;这里也可以使用前面extract()函数中使用的组合关键字,如下面的代码会在系统当前时间上加上1小时10分钟。
select adddate(now(),interval '1:10' day_minute);
AddTime(x,y)函数用于时间的推算,其中,x为日期或时间表达式,y为时间表达式,函数会返回x+y的值,如果x或y为null则函数返回null。下面的代码演示了AddTime()函数的应用。
select addtime(now(),'2:10:30');
执行代码会返回系统当前时间加上2小时10分钟30秒的时间。
DateDiff(x,y)函数会按日期信息计算x-y的天数,如下面的代码。
select DateDiff('2026-5-9 23:59:59','2026-5-10');
执行代码会显示-1。
TimeDiff(x,y)函数会计算x-y的时间间隔,如下面的代码。
select TimeDiff('23:59:59','22:50:51');
执行代码会显示'01:09:08'。
日期和时间数据除了使用字符串格式,需要时也可以转换为数值格式,只需要对日期或时间数据进行加0计算即可完成格式的转换,如下面的代码。
select now()+0;
执行代码会返回14位的日期加时间数值,包含4位年份,各2位的月、日、时、分、秒数据。请注意,将日期和时间转换为数值时,如果有毫秒或微秒部分,会使用小数部分表示,如“select now(3)+0;”会显示包含3位小数的数据(末尾的0不会显示)。
Date_Format(date,format)函数可以将参数date中的日期和时间数据转换为format指定的格式。参数format使用字符串指定格式,其中可以使用的格式化字符包括:
除了表中的格式字符,在格式化字符串中可以使用其它可视字符,如下面的代码会按指定的格式显示系统当前日期。
select date_format(now(),'%Y年%m月%d日');
代码会按“yyyy年mm月dd日”的格式显示日期。
下一篇文章还将讨论如何使用、查询日期和时间数据。