前言
时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的数据时,都会根据数据库中的时间索引数据进行操作。因此很大一部分我们操作数据都得先从时间数据下手,但是想要真正提取到我们想要的时间作为索引,还需要我们掌握许多功能函数方便我们操作,这是一个比较复杂的运用过程。
上文:一文速学-玩转MySQL获取时间、格式转换各类操作方法详解 已经详细介绍了SQL时间数据类型:三种:Date、Datetime、Timestamp。以及如何在MySQL数据库中获取本地时间以及其他数据类型和时间数据类型的相互转换。在了解以上函数方法操作的基础之上,我们便可以开始进行时间运算得到我们想要的时间片了。因此特地写下这篇文章,记录一些十分好用常用的处理数据库SQL时间运算的函数,以及实例运用这些函数完成一些复杂查询任务。希望能够帮助到正在看此博文的各位,如果还有什么问题解决不了尽请在评论区提出,博主会一一作答。
MySQL时间选取函数
1.<time类型>(<数据>)类型
上文在获取本地日期的年份也日期时用到了HOUR(SYSDATE()),其实这也是最常用的时间选取函数,将要取的时间类型放前置就好了,这里将所有的前置时间函数贴出:
前置 结果描述
date 获取日期 如2022-06-19
time 获取时间 如10:10:22.111111
year 获取年份 如2022
quarter
获取当月季度 每三个月为一个季度 1-3为1季度
4-6为2季度,7-9为3季度,10-12为4季度。
month 获取月份 如现在的6月份,就显示6
week 获取从1月1日开始度过的周数 现在也就是24周
day 获取天数到当前月份1日为止,如19日
hour 获取小时 如10点
minute 获取分钟 如现在16分钟
second 获取秒数 如59秒
microsecond 获取微秒数
由于展示函数格式均有重复性这里仅展示一种,展示的数据库仍和上次一样:
select week(create_time) from value_test
其他用法均类似,这里不再展示,将所有代码贴出大家可自行尝试:
select date(create_time) from value_test select time(create_time) from value_test select year(create_time) from value_test select quarter(create_time) from value_test select month(create_time) from value_test select week(create_time) from value_test select day(create_time) from value_test select hour(create_time) from value_test select minute(create_time) from value_test select second(create_time) from value_test select microsecond(create_time) from value_test
2.Extract()
和上述效果一样,除了没有date(),time() 的功能外,其他功能一应具全。并且还具有选取‘day_microsecond'等功能。
select EXTRACT(month from create_time) from value_test
同样这些代码格式具有重复性,这里把所有extarct可用的格式贴出:
前置 结果描述
date 获取日期 如2022-06-19
time 获取时间 如10:10:22.111111
year 获取年份 如2022
quarter
获取当月季度 每三个月为一个季度 1-3为1季度
4-6为2季度,7-9为3季度,10-12为4季度。
month 获取月份 如现在的6月份,就显示6
week 获取从1月1日开始度过的周数 现在也就是24周
day 获取天数到当前月份1日为止,如19日
hour 获取小时 如10点
minute 获取分钟 如现在16分钟
second 获取秒数 如59秒
microsecond 获取毫秒数
year_month 获取年后月份 如:202206
day_hour 获取日和小时 如:1916
day_minute 获取日、小时、分钟 如191644
day_second 获取日到秒 如19164455
day_microsecond 获取日到微秒 如19164455123456
hour_minute 获取小时和分钟 如1646
hour_second 获取小时到秒数 如164555
hour_microsecond 获取小时到微妙数 如164555123456
minute_second 获取分钟到秒 如4813
minute_microsecond 获取分钟到微秒 如4813123456
second_microsecond 获取秒到微妙 如13123456
其他用法均类似,这里不再展示,将所有代码贴出大家可自行尝试:
select EXTRACT(year from create_time) from value_test select EXTRACT(quarter from create_time) from value_test select EXTRACT(month from create_time) from value_test select EXTRACT(week from create_time) from value_test select EXTRACT(day from create_time) from value_test select EXTRACT(hour from create_time) from value_test select EXTRACT(minute from create_time) from value_test select EXTRACT(second from create_time) from value_test select EXTRACT(microsecond from create_time) from value_test select EXTRACT(year_month from create_time) from value_test select EXTRACT(day_hour from create_time) from value_test select EXTRACT(day_minute from create_time) from value_test select EXTRACT(day_second from create_time) from value_test select EXTRACT(day_microsecond from create_time) from value_test select EXTRACT(hour_second from create_time) from value_test select EXTRACT(hour_minute from create_time) from value_test select EXTRACT(hour_microsecond from create_time) from value_test select EXTRACT(minute_second from create_time) from value_test select EXTRACT(minute_microsecond from create_time) from value_test select EXTRACT(second_microsecond from create_time) from value_test
3.Dayof<时间类型>
共有三种函数:
格式 | 结果描述 |
dayofweek | 返回当日在该周的位置 1为星期天 2为星期二... |
dayofmonth | 返回当日在该月的位置 天数 |
dayofyear | 返回当日在该年的位置 天数 |
select dayofweek(create_time) from value_test
select dayofmonth(create_time) from value_test
select dayofyear(create_time) from value_test
4.<时间类型>name()
该函数返回的是星期和月份的名称:
select dayname(create_time) from value_test
select monthname(create_time) from value_test
5.last_day()
该函数返回月份中的最后一天
select last_day('2022-02-01')
select last_day('2022-06-01')
可以利用计算得到当月共有多少天数。