分时间段(年份或月份)统计,没有数字补0 Java(替代 MYSQL) 做法
需求如下~


输入年份,表格第一行 1-12 月
输入年份和月份 表格第一行 1--31 具体天数
表格第二行就是统计数量,没有补0.
看完首先想到MYSQL查询出连续一段时间和数量,没有 就为0.
好像这样

但是 做法 需要新建一个时间表 ,那个时间表里面的数据一定要事先生成,生成个几十年就够用了。再和查数据表连接。
可参考 http://www.cnblogs.com/LUA123/p/6155414.html
下面选择用Java后台处理整个需求,不用MYSQL。
查出有数据的时间 和 数量不难,要点是 按 连续月份 和日 排列 。
查出有数据的时间和数量 放入Map
Date start =ToolDateTime.parse(nf + "-" + yf + "-01",ToolDateTime.pattern_ymd);
Date end =ToolDateTime.parse(nf + "-" + (Integer.valueOf(yf)+1) + "-00",ToolDateTime.pattern_ymd);
查出 连续时间段 。
遍历连续时间段,通过(map)判断下, 有数量 就 set 数量 进一个对象,没有就 把这个对象 数量位置为0。 对象另一个属性不是查出来的
时间,是如图第一行。
挨个 添加进List。后台Java是
public void sumDays () {
String nf = getPara("tjnf");
String yf = getPara("tjyf");
List<Record> jyrslist = JyrstjService.service.findjyrstj(nf,yf); //有数据的时间段和数量
Map<String, Record> jymap = new HashMap<>();
for (Record record : jyrslist) {
jymap.put(record.getStr("sj"), record);
}
List<Record> jylist = new ArrayList<>();
int total = 0;
if ( !"".equals(yf) && yf != null && !"".equals(nf) && nf != null) {
try {
Date start =ToolDateTime.parse(nf + "-" + yf + "-01",ToolDateTime.pattern_ymd);
Date end =ToolDateTime.parse(nf + "-" + (Integer.valueOf(yf)+1) + "-00",ToolDateTime.pattern_ymd);
List<String> daySpaceDate = ToolDateTime.getDaySpaceDate(start, end); //连续的时间段
for (String day : daySpaceDate) {
Record record = new Record();
Date date = ToolDateTime.parse(day,ToolDateTime.pattern_ymd);
record.set("sj", date.getDate()); //把连续时间段变成对象属性 1-30 天数
if ( jymap.containsKey(day)) { // 有数量 就 set 数量 进一个对象
String sum = jymap.get(day).get("sum").toString();
total += Integer.valueOf(sum); //合计,与重点无关
record.set("sum", sum);
}else {
record.set("sum", 0);
}
jylist.add(record);
}
} catch (Exception e) {
}
}else if ( !"".equals(nf) && nf != null ) {
for (int i = 0; i < 12; i++) {
String day = nf + "-" + (i < 10 ? "0" : "") + (i+1);
Record record = new Record();
Date date = ToolDateTime.parse(day + "-01",ToolDateTime.pattern_ymd);
record.set("sj", (date.getMonth()+1) ); //某年的连续月份处理
if ( jymap.containsKey(day)) {
String sum = jymap.get(day).get("sum").toString();
total += Integer.valueOf(sum);
record.set("sum", jymap.get(day).get("sum"));
}else {
record.set("sum", 0);
}
jylist.add(record);
}
}
setAttr("total", total);
setAttr("jylist", jylist);
render("/platform/xxgl/jyrstj/content.html");
}
sql语句 mysql 这样:
select
count(1) sum,
date_format(lswczl.WCSJ,
'%Y-%m-%d') sj
from
表 lswczl
where
date_format(lswczl.WCSJ,'%Y-%m') = '2018-11'
group by
date_format(lswczl.WCSJ,
'%Y-%m-%d')
分时间段(年份或月份)统计,没有数字补0 Java(替代 MYSQL) 做法的更多相关文章
- [PHP学习教程 - 数字]001.数字补0(Num padding)
引言:在日常工作中,经常要用到数字前后补0的操作,如:日期格式yyyy-MM-dd等等. 在php中有多种前后填充函数——今天,我们就介绍常用的两种,实现数字补零: str_pad sprintf 大 ...
- python 中str format 格式化数字补0方法
>>> "{0:03d}".format(1)'001'>>> "{0:03d}".format(10)'010'> ...
- PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
一.数字补0. 如果要自动生成学号,自动生成某某编号,就像这样的形式“d0000009”.“d0000027”时,那么就会面临一个问题,怎么把左边用0补齐成这样8位数的编码呢?我想到了两种方法实现这个 ...
- SQL语句更新时间字段的年份、月份、天数、时、分、秒
SQL语句更新时间字段的年份.月份.天数.时.分.秒 --修改d表日期字段的年份update dset birth=STUFF(convert(nvarchar(23),birth,120),1,4, ...
- js中获得当前时间是年份和月份
js中获得当前时间是年份和月份,形如:201208 //获取完整的日期 var date=new Date; var year=date.getFullYear(); var month ...
- oracle 行转列,动态年份,月份列。已解决!
-----------------存储过程包体----------- procedure GetComparativeAnalysisTB(p_StartTime varchar2, ----开始时间 ...
- sql生成连续日期(年份、月份、日期)
此随笔主在分享日常可能用到的sql函数,用于生成连续日期(年份.月份.日期) 具体的看代码及效果吧! -- ============================================= ...
- oracle 根据一个时间段获取这个时间段内所有月份、天数、日期
注:本文来源于< oracle 根据一个时间段获取这个时间段内所有月份.天数.日期 > 获取月份列表: SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10 ...
- Calendar获取当前年份、月份、日期
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Te ...
- java获取当前年份、月份和日期字符串等
Java获取当前年份.月份和日期是通过Calendar类的实例对象来获取的. 首先创建一个Calendar类的实例对象,Calendar类属于java.util包. Calendar calendar ...
随机推荐
- dify升级,PostgreSQL数据库字段更新处理
一.概述 dify运行在容器中,PostgreSQL用的是阿里云,已经运行了很长一段时间.某些表的数据量很大,比如workflowruns表,就有100GB.这个主要是,详细记录了工作流的执行情况,包 ...
- AI可解释性 II | Saliency Maps-based 归因方法(Attribution)论文导读(持续更新)
AI可解释性 II | Saliency Maps-based 归因方法(Attribution)论文导读(持续更新) 导言 本文作为AI可解释性系列的第二部分,旨在以汉语整理并阅读归因方法(Attr ...
- 查缺补漏——01-BFS
01bfs 解决的是一类特殊的最段路问题. 在学习它的过程中,我更加深刻地学习到了泛化路径和 bfs. 01-BFS 是什么 首先明确,01-BFS 是一种图论算法.它解决的事最短路径问题.最短路径算 ...
- H5 ios端底部安全距离CSS
html 头部添加 <meta name="viewport" content="width=device-width, initial-scale=1.0,min ...
- 深度讲解-APP安全评估报告(APP上架必备)
随着<具有舆论属性或社会动员能力的互联网信息服务安全评估规定>(以下简称<评估规定>)的发布,互联网信息服务提供者在开展具有舆论属性或社会动员能力的App服务时,必须遵循相应的 ...
- UT
Mockito 官网 注解
- Flex布局教程:语法篇--css中的display:Flex
先用一句话秒懂display:Flex;这句css代码,如图: 放个目录先: 目录 一.Flex布局是什么? 二.基本概念 三.容器的属性 3.1 flex-direction属性(主轴的方向) 3. ...
- js技术之“向数组添加元素”
一.js中对于数组[]的操作很常见 下面记录一下js向数组添加元素的方法 const array=[1,2,3]; console.log('原数组:',array); 效果图 二.用push在数组后 ...
- Linux命令之剪切
一.格式 mv source dest 二.介绍 mv: 命令 source: 源文件 dest: 目的地址 三.案例 剪切conf 文件到 /home/data 文件下 目前conf 文件是在/h ...
- 开源PDF处理工具——Ghostscript的安装和使用
1. 安装 Ghostscript Windows 下载 Ghostscript: 官网:https://www.ghostscript.com/download/gsdnld.html 选择适合你的 ...