1、#查询当天的数据记录
· SELECT * FROM 表名 WHERE TO_DAYS(日期列) = TO_DAYS(NOW());
· SELECT * FROM	表名 WHERE DATE(日期列) = CURDATE();

2、#统计一定范围内,每个单位内的数据数量【单位可以天,月、周、年、等】
 - #按天统计:
 · SELECT DATE_FORMAT( 日期列, '%Y-%m-%d' ) days, count(*) count FROM 表名 GROUP BY days;
 - #按周统计:
 · SELECT DATE_FORMAT( 日期列, '%Y-%u' ) weeks, count(*) count FROM 表名GROUP BY weeks; 
 - #按月统计:
 · SELECT DATE_FORMAT( 日期列, '%Y-%m' ) months,	count(*) count FROM	表名 GROUP BY months;
 
3、#统计最近七天内的数据并按天分组:
· SELECT DATE_FORMAT( 日期列, '%Y-%m-%d' ) dates,	count(*) count FROM	( SELECT * FROM 表名 WHERE DATE_SUB( CURDATE( ), INTERVAL 7 DAY )<= date( 日期列 ) ) AS v GROUP BY dates;

SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) days, count(*) count FROM yq_closecontact_report where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time) GROUP BY days;
	
SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) dates,	count(*) count FROM	( SELECT * FROM yq_closecontact_report WHERE DATE_SUB( CURDATE( ), INTERVAL 7 DAY )<= date( create_time ) ) AS v GROUP BY dates;

4、#查询1分钟内的数据;
SELECT * FROM 表名 WHERE 日期列 >= CURRENT_TIMESTAMP - INTERVAL 1 MINUTE
MySQL按时间查询

今天

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

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

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

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

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

SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1
查询本季度数据

select * from 表名 where QUARTER(create_date)=QUARTER(now());
查询上季度数据

select * from 表名 where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
查询本年数据

select * from 表名 where YEAR(create_date)=YEAR(NOW());
查询上年数据

select * from 表名 where year(create_date)=year(date_sub(now(),interval 1 year));
查询当前这周的数据

SELECT name,submittime FROM 表名 WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());
查询上周的数据

SELECT name,submittime FROM 表名 WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;
查询上个月的数据

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 下月第一天
查询当前月份的数据

select name,submittime from 表名 where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')
查询距离当前现在6个月的数据

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

日期和时间相关函数

处理日期和时间字段的函数有很多,有的经常会在查询中使用到,下面介绍下几个相关函数的使用方法。

  • CURDATE 和 CURRENT_DATE   两个函数作用相同,返回当前系统的日期值。
  • CURTIME 和 CURRENT_TIME   两个函数作用相同,返回当前系统的时间值。
  • NOW() 和 SYSDATE()   两个函数作用相同,返回当前系统的日期和时间值。
  • UNIX_TIMESTAMP   获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数。
  • FROM_UNIXTIME   将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数。
  • TO_DAYS()   提取日期值并返回自公元0年到现在的天数。
  • DAY()    获取指定日期或时间中的天值。
  • DATE()   获取指定日期或时间中的日期。
  • TIME()   获取指定日期或时间中的时间。
  • MONTH   获取指定日期中的月份。
  • WEEK   获取指定日期是一年中的第几周。
  • YEAR   获取年份。
  • QUARTER  获取日期所在的季度值。
  • DATE_ADD 和 ADDDATE   两个函数功能相同,都是向日期添加指定的时间间隔。
  • DATE_SUB 和 SUBDATE   两个函数功能相同,都是向日期减去指定的时间间隔。
  • ADDTIME   时间加法运算,在原始时间上添加指定的时间。
  • SUBTIME   时间减法运算,在原始时间上减去指定的时间。
  • DATEDIFF   获取两个日期之间间隔,返回参数 1 减去参数 2 的值。
  • DATE_FORMAT   格式化指定的日期,根据参数返回指定格式的值。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐