Mysql查询时间范围内的数据如果为空则补全为0

mysql 查询出来的数据

image.png

因为日志要做统计,所以我需要每天都展示出来,如果为空,则展示为0,显然上图中的10-18日没有展示出来

在网上看了一圈都是基于数据库实现的,感觉有些麻烦,本文介绍的是代码实现,亲测可用,废话不多说:

  1. DO 类 数据库的结果集
 @Data
public class Demo{
    @JsonFormat( pattern="yyyy-MM-dd", timezone = "GMT+8")
    @ApiModelProperty("日期")
    private LocalDate date;
    @ApiModelProperty("数量")
    private int count;
}
  1. 工具类
    /**
     *  后台查询出来的时间范围数据,如果有的日期没有数据为空,则给补全为0
     *  LocalDate 是java8中的类,好用且性能强
     *  d1 和d2代表时间范围  
     */
    public static List transNullToZero(List list,Date d1, Date d2){
        LocalDate start = dateToLocalDate(d1);
        LocalDate end = dateToLocalDate(d2);
        int count = 0 ;
        // 如果两个日期相等,就停止执行
        while(!start.isEqual(end)){
            Demo demo= new Demo();
            if(list!=null&&list.size()>count){
                Demo demo1= list.get(count);
                LocalDate dat = demo1.getDate();
                if(!start.isEqual(dat)){
                    demo.setCount(0);
                    demo.setDate(start);
                    list.add(count,demo);
                }
            }else{
                demo.setCount(0);
                demo.setDate(start);
                list.add(count,demo);
            }
            // 将开始日期加1天
            start = start.plusDays(1);
            count++;
        }
        return list;
    }

    /**
     * 将 Date 转为 LocalDate
     */
    public static LocalDate dateToLocalDate(Date date) {
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }

你可能感兴趣的:(Mysql查询时间范围内的数据如果为空则补全为0)