MySQL在查询时日期补全和补零解决方案

在做数据统计的时候,经常会遇到以每天,每月为周期的统计。如果是使用代码或者SQL进行补零都是很麻烦的事情,这样的话,可以使用一张辅助表来让实现方式变得简单。

建表date_model:

CREATE TABLE `date_model` (
  `id` bigint(20) NOT NULL,
  `date_str` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在“date_str”字段中保存每天的日期如:2019-08-18

进行查询:

SELECT t.date_str, IFNULL(s.num,0) FROM date_model t LEFT JOIN (
	SELECT DATE_FORMAT(b.payment_time,'%Y-%m-%d') as time, SUM(b.price) AS num 
	FROM date_model a 
	LEFT JOIN indent b ON a.date_str = DATE_FORMAT(b.payment_time,'%Y-%m-%d') 
	WHERE b.type = 2 AND b.state = 2
	AND b.payment_time >= #{startTime} AND b.payment_time <= #{endTime} 
	GROUP BY time) s ON t.date_str = s.time 
WHERE t.date_str >= #{startTimeStr} AND t.date_str <= #{endTimeStr}
ORDER BY t.date_str DESC

这个SQL是mapper.xml中的样子,其中#{startTime}和#{endTime},是正常的时间字符串,如:“2019-05-05 00:00:00”
#{startTimeStr}和#{endTimeStr}需要在代码中将#{startTime}或者#{endTime}处理成日期,如:“2019-05-05”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值