MySQL按时间查询

MySQL按时间查询

一. 常用时间查询语句

1.1 今天

select * from 表名 where to_days(时间字段名) = to_days(now());

1.2 昨天

SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1

1.3 近七天

SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)

1.4 近30天

SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)

1.5 本月

SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )

1.6 上一月

SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1

1.7 查询本季度数据

select * from 表名 where QUARTER(create_date)=QUARTER(now());

1.8 查询上季度数据

select * from 表名 where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));

1.9 查询本年数据

select * from 表名 where YEAR(create_date)=YEAR(NOW());

1.10 查询上年数据

select * from 表名 where year(create_date)=year(date_sub(now(),interval 1 year));

1.11 查询当前这周的数据

SELECT name,submittime FROM 表名 WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());

1.12 查询上周的数据

SELECT name,submittime FROM 表名 WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;

1.13 查询上个月的数据

select name,submittime from 表名 where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
select * from 表名 where DATE_FORMAT(pudate,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ; 
select * from 表名 where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now()) 
select * from 表名 where MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now()) 
select * from 表名 where YEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = YEAR(now()) and MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now()) 
select * from 表名 where pudate between  上月最后一天  and 下月第一天

1.14 查询当前月份的数据

select name,submittime from 表名 where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')

1.15 查询距离当前现在6个月的数据

select name,submittime from 表名 where submittime between date_sub(now(),interval 6 month) and now()

二. 实战查询语句

2.1 近一月按照创建时间(年月日)分组并统计总数

SELECT DATE(create_time) AS TIME,COUNT(id) AS COUNT FROM tb_py_news WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(create_time) GROUP BY DATE(create_time)

其中 create_time 本身是包含: 年月日,时分秒 ,如:2020-01-28 14:04:38 而当使用了:DATE(create_time) 时,则变为年月日了;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL中,按时间分表的常见做法是使用MySQL的分区表功能。通过对分区表进行查询,可以快速定位到对应的数据分区,从而实现时间分表查询的效果。 以下是一个按月份分表的例子: 1. 创建分区表 ```sql CREATE TABLE my_table ( id INT NOT NULL, created_at TIMESTAMP NOT NULL ) PARTITION BY RANGE(TO_DAYS(created_at)) ( PARTITION p201901 VALUES LESS THAN (TO_DAYS('2019-02-01')), PARTITION p201902 VALUES LESS THAN (TO_DAYS('2019-03-01')), PARTITION p201903 VALUES LESS THAN (TO_DAYS('2019-04-01')), PARTITION p201904 VALUES LESS THAN (TO_DAYS('2019-05-01')), PARTITION p201905 VALUES LESS THAN (TO_DAYS('2019-06-01')), PARTITION p201906 VALUES LESS THAN (TO_DAYS('2019-07-01')), PARTITION p201907 VALUES LESS THAN (TO_DAYS('2019-08-01')), PARTITION p201908 VALUES LESS THAN (TO_DAYS('2019-09-01')), PARTITION p201909 VALUES LESS THAN (TO_DAYS('2019-10-01')), PARTITION p201910 VALUES LESS THAN (TO_DAYS('2019-11-01')), PARTITION p201911 VALUES LESS THAN (TO_DAYS('2019-12-01')), PARTITION p202001 VALUES LESS THAN (TO_DAYS('2020-01-01')), PARTITION p202002 VALUES LESS THAN (TO_DAYS('2020-02-01')), PARTITION p202003 VALUES LESS THAN (TO_DAYS('2020-03-01')), PARTITION p202004 VALUES LESS THAN (TO_DAYS('2020-04-01')), PARTITION p202005 VALUES LESS THAN (TO_DAYS('2020-05-01')), PARTITION p202006 VALUES LESS THAN (TO_DAYS('2020-06-01')), PARTITION p202007 VALUES LESS THAN (TO_DAYS('2020-07-01')), PARTITION p202008 VALUES LESS THAN (TO_DAYS('2020-08-01')), PARTITION p202009 VALUES LESS THAN (TO_DAYS('2020-09-01')), PARTITION p202010 VALUES LESS THAN (TO_DAYS('2020-10-01')), PARTITION p202011 VALUES LESS THAN (TO_DAYS('2020-11-01')), PARTITION p202012 VALUES LESS THAN (TO_DAYS('2021-01-01')) ); ``` 2. 查询分区表 ```sql SELECT * FROM my_table WHERE created_at >= '2019-01-01' AND created_at < '2019-02-01'; ``` 在这个例子中,我们创建了一个名为 `my_table` 的分区表。表中包含了一个 `id` 字段和一个 `created_at` 字段,其中 `created_at` 是一个 `TIMESTAMP` 类型的字段,表示数据创建时间。 我们将表按照 `created_at` 字段的时间范围进行了分区,每个分区代表一个月份的数据。例如,`p201901` 分区存储的是 2019 年 1 月份的数据。 当我们需要查询某个时间范围内的数据时,只需要指定对应的分区即可,比如上述例子中查询了 2019 年 1 月份的数据。由于查询时只需要扫描对应的分区,因此查询速度非常快。 需要注意的是,分区表需要在创建表时就定义好分区结构,因此如果需要对分区结构进行修改,需要重新创建表。此外,分区表的具体使用方法还会受到 MySQL 版本、存储引擎等因素的影响,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗余

码字来之不易,您的鼓励我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值