分时间段(年份或月份)统计,没有数字补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 ...
随机推荐
- FastAPI Pydantic动态调整Schema
title: FastAPI Pydantic动态调整Schema date: 2025/3/29 updated: 2025/3/29 author: cmdragon excerpt: Pydan ...
- 【网络协议】深入理解HTTP协议
# 协议 协议就是一种双方提前约定好采用某种形式,以某种规格,利用某种物体把数据传输出去:而另一方再以同样的规则和流程去接收数据的约定制度或者规章. 现代网络是由多种运行在不同平台上的异构系统组成的. ...
- 使用Python计算并可视化长直导线产生的磁场
引言 大家好,今天我们来探讨一个有趣的话题--长直导线产生的磁场,并通过 Python 来进行计算和可视化.你可能会问,为什么要研究这个问题?其实,这是电磁学中的一个基础问题,理解了它,我们就能更好地 ...
- python,提取数据,提取奇数位或者偶数位数据的方法
如有数组num=["1","2","3","4","5"] 怎么按照奇.偶数位取数? 写法如下 nu ...
- 尝试通过DeepSeek来优化提高WordPress网站的打开速度,还真有效!
头图由AI生成 嗯,用户问的是WordPress网站如何优化打开速度.首先,我需要考虑用户可能的背景.他们可能是一个WordPress网站的管理员或者拥有者,发现网站加载速度不够快,想要进行优化.用户 ...
- <HarmonyOS第一课06>构建更加丰富的页面
视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497640610394?ha_sou ...
- nacos安装
linux-docker 下载nacos docker pull nacos/nacos-server:v2.2.3 `` ## 下载git脚本 ```shell cd /prod mkdir nac ...
- 掌握Node.js原理,开启异步编程之旅
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- golang 接口按需获取资源
场景 爬虫业务场景,我们需要调用三方接口获取代理ip地址,每个ip地址可以使用的时间有限和价格的,本着不浪费资源,我们在这里做一层封装. 当有其他业务调用我们接口的时候,会拉起定时任务,这个定时任务的 ...
- DevEco重大更新快来体验吧
HarmonyOS首个api17 release已经正式发布了.这次的更新DevEco增加了很多重大特性,系统能力也有所增强.DevEco现在支持创建api17的应用了,模拟器也首次支持阔折叠手机以及 ...