数据大概如下:
id | date | data |
---|---|---|
1 | 2021-01-01 | 1 |
2 | 2021-01-02 | 1 |
3 | 2021-01-03 | 1 |
4 | 2021-01-04 | 1 |
5 | 2021-01-05 | 1 |
6 | 2021-01-06 | 1 |
7 | 2021-01-07 | 1 |
8 | 2021-01-08 | 1 |
9 | 2021-01-09 | 1 |
10 | 2021-01-10 | 1 |
…… | …… | …… |
N | 202N-N-N | 1 |
我需要查询每个月5,15,25,(30或31)号的数据,如何实现呢?
注意,每月的最后一天,如果是小月就显示30的数据,如果是大月就显示31的数据。
day得出当前日期天数, last_day当前月份最后一天是30还是31
select * from 表名 where day(date ) in (5,15,25, day(last_day(date )));
select * from 表名 where date >='2021-8-5 00:00:00' and date<='2021-8-5 23:59:59'
select * from t where date like '%-%-05'(查询5号,其他依此类推)
单个查询where一个区间范围,多个查询使用union连接起来,最后一个查询使用day()函数获取天判断是30和31,除开最后一个查询其他应该挺快,如果还要优化就增加列提前把day从时间提取出来