主题 |
格式 |
描述 |
---|---|---|
年 |
%Y |
4位数的年 |
月 |
%b |
月份对应的英文缩写 |
月 |
%M |
月份对应的英文全称 |
月 |
%m |
01-12的月 |
月 |
%c |
1-12的月份数值 |
日 |
%d |
01-31的某月里面的第几天 |
日 |
%e |
1-31的某月里面的第几天 |
日 |
%D |
用th后缀表示某月中的第几天 |
日 |
%j |
001-366的一年中的第几天 |
周 |
%a |
星期几对应的英文缩写 |
周 |
%W |
星期几对应的英文全称 |
时 |
%H |
00-23的小时 |
时 |
%h |
01-12的小时 |
分 |
%i |
00-59的分钟 |
秒 |
%S |
秒(00-59) |
秒 |
%f |
微秒 |
时分秒 |
%T |
返回当前的时分秒, 24-小时 (hh:mm:ss) |
select date_format("2019-12-25 22:47:37","%Y-%m-%d")
通过运行上面的代码,就会返回4位数的年、01-12的月、01-31的天,三者之间且用-分隔开来,即2019-12-25。
这里需要注意下1和01的区别,本质上都是表示的1,但是展示上会有些不太一样,比如下面代码中,我们的原日期是2019-1-1,但是返回的结果是2019-01-01的。
select date_format("2019-1-1 22:47:37","%Y-%m-%d") select date_format("2019-12-25 22:47:37","%H:%i:%S")
通过运行上面的代码就会返回00-23的小时、00-59的分、00-59的秒,三者之间用:分隔开来,即22:47:37。
除了date_format()函数以外,还有另外一个函数extract,用于返回一个具体日期时间中的单独部分,比如年、月、日、小时、分钟等等。具体形式如下:
extract(unit from datetime)
datetime表示具体的日期时间,unit表示要从datetime中返回的单独的部分。unit值可以是下列的值:
unit |
说明 |
---|---|
year |
年 |
month |
月 |
day |
日 |
hour |
小时 |
minute |
分钟 |
second |
秒 |
week |
周数,全年第几周 |
select extract(year from "2019-12-25 22:47:37") as col1 ,extract(month from "2019-12-25 22:47:37") as col2 ,extract(day from "2019-12-25 22:47:37") as col3
通过运行上面的代码,就会分别获取到datetime中的年月日,具体结果如下:
col1 |
col2 |
col3 |
---|---|---|
2019 |
12 |
25 |
有的时候我们也需要对日期之间进行运算,比如我要获取今天往前7天对应的日期,或者今天往后13天对应的日期,可以去翻日历,也可以去数数,但是这些方法肯定都不是最直接的方法。所以需要日期之间的运算。
比如我们要获取今天之后的x天对应的日期,就是相当于在今天日期的基础上加x天,我们把这叫做向后偏移,这个时候就可以使用date_add()函数,具体形式如下:
date_add(date,interval num unit)
date表示当前的日期,或者当前的日期时间;interval是一个固定的参数;num为上面讲到的x;unit表示你要加的单位,是往后移动7天,还是7月,还是7年,可选值与extract函数中unit的可选值是一样的。
select "2019-01-01" as col1 ,date_add("2019-01-01",interval 7 year) as col2 ,date_add("2019-01-01",interval 7 month) as col3 ,date_add("2019-01-01",interval 7 day) as col4
通过运行上面的代码,就会返回2019-01-01往后7年、7月、7天对应的日期,具体结果如下:
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
2019-01-01 |
2026-01-01 |
2019-08-01 |
2019-01-08 |
select "2019-01-01 01:01:01" as col1 ,date_add("2019-01-01 01:01:01",interval 7 hour) as col2 ,date_add("2019-01-01 01:01:01",interval 7 minute) as col3 ,date_add("2019-01-01 01:01:01",interval 7 second) as col4
通过运行上面的代码,就会返回2019-01-01 01:01:01往后7小时、7分钟、7秒对应的日期,具体结果如下:
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
2019-01-01 01:01:01 |
2019-01-01 08:01:01 |
2019-01-01 01:08:01 |
2019-01-01 01:01:08 |
有向后偏移,就会有向前偏移。比如我们要获取今天之前的若干天,就是相当于是在当前日期的基础上减去x天,这个时候我们使用的是date_sub()函数,date_sub与date_add的函数形式是一样的。把上面代码中的date_add换成date_sub就表示向前偏移。
select "2019-01-01" as col1 ,date_sub("2019-01-01",interval 7 year) as col2 ,date_sub("2019-01-01",interval 7 month) as col3 ,date_sub("2019-01-01",interval 7 day) as col4
通过运行上面的代码,就会返回2019-01-01往前7年、7月、7天对应的日期,具体结果如下:
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
2019-01-01 |
2012-01-01 |
2018-06-01 |
2018-12-25 |
向前偏移指定的时间,我们除了使用date_sub以外,我们还可以继续使用date_add,只不过把加的具体num值换成负数就行,比如7换成-7即可,具体实现代码如下:
select "2019-01-01" as col1 ,date_add("2019-01-01",interval -7 year) as col2 ,date_add("2019-01-01",interval -7 month) as col3 ,date_add("2019-01-01",interval -7 day) as col4
通过运行上面的结果与使用date_sub得出来的结果是一致的。
上面讲完了向前偏移、向后偏移,我们有的时候还需要获取两日期之差,使用的datediff()函数,datediff用于返回两日期之间相差的天数,函数形式如下:
datediff(end_date,start_date)
我们是用end_date去减start_date的。
select datediff("2019-01-07","2019-01-01")
通过运行上面的代码,会返回2019-01-07与2019-01-01之间的天数差,结果为6。
你还可以看:
Sql 的执行顺序是怎样的?
到此这篇关于Mysql日期时间函数的文章就介绍到这了,更多相关Mysql日期时间函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!