获取时间的年月日
DATE_FORMAT(“时间字段”,’%Y-%m-%d’)
例 DATE_FORMAT(" 2020-11-07 16:26:09",'%Y-%m-%d') ==========> 2020-11-07
统计本周 本年 本月 某天的数据信息
COUNT(IF (TO_DAYS(时间字段) - TO_DAYS(时间字段) <= 0,1,NULL))
TO_DAYS ----本天的数据
例COUNT(IF (TO_DAYS(read_time) - TO_DAYS(end_time) <= 0,1,NULL)) 统计 实际时间小于预期时间的数量
SELECT COUNT(IF (TO_DAYS(d.real_end_time) - TO_DAYS(d.end_time) <= 0,1,NULL)) ,
COUNT(IF (TO_DAYS(d.real_end_time) - TO_DAYS(d.end_time) >0,1,NULL) ) ,
dma.create_time
FROM work w LEFT JOIN de d ON d.id = w.de_id`
<where> AND w.delete_flag = 1
AND w.operator_id = #{userId}
<if test="time != null and time != '' ">
AND ${time}(d.create_time) = ${time}(NOW())
</if>
<if test="startTime != null and endTime != null">
AND d.create_time BETWEEN #{startTime} AND #{endTime}
</if>
</where>
GROUP BY DATE_FORMAT(d.create_time,'%Y-%m-%d')
解析AND ${time}(d.create_time) = ${time}(NOW()) time 灵活配置 WEEK 本周 ,MONTH 本月 ,YEAR 本年 切记 这里的time参数不能用 #号接收 要用$接收 否则会报错
实例AND WEEK (d.create_time) = WEEK (NOW()) d.create_time 时间字段 NOW()当前时间
#{}:传入的内容会被作为字符串,被加上引号,以预编译的方式传入,安全性高,可以防止sql注入。
${}:传入的内容会直接拼接,不会加上引号,可能存在sql注入的安全隐患。
AND d.create_time BETWEEN #{startTime} AND #{endTime} 根据时间段查询 startTime开始时间 endTime结束时间 这里时间类行是date
GROUP BY DATE_FORMAT(d.create_time,'%Y-%m-%d') 根据时间日期分组 年月日
//今天
DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
//昨天
DATE_SUB(CURDATE(), INTERVAL 1 DAY) = DATE(DATE_FORMAT(create_time,'%Y-%m-%d'))
//今年
DATE_FORMAT(create_time,'%Y') = DATE_FORMAT(NOW(),'%Y')
或AND YEAR(create_time) = YEAR(NOW())
//上年
DATE_FORMAT(create_time,'%Y') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR),'%Y')
//本月
DATE_FORMAT(create_time,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')
或AND MONTH(create_time) = MONTH(NOW())
//上月
DATE_FORMAT(create_time,'%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m')
//本周
AND WEEK(create_time) = WEEK(NOW())
//上周
YEARWEEK(
date_format( create_time, '%Y-%m-%d' )) = YEARWEEK(
now())- 1