按月获取输入日期范围的数据

pxyaymoc  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(333)

在我的oracle表中,我有date和salary列。我创建了一个传递开始日期和结束日期的javaapi。从我的数据库,我需要取记录与工资总额列每月为基础。例如:输入:-开始日期:2019年1月5日,结束日期:2019年3月13日。它应该返回3条记录:
2019年1月5日至2019年2月4日工资总额,
2019年2月5日至2019年3月4日工资总额,
2019年3月5日至2019年3月13日的工资总额。
需要帮助提前谢谢

smdnsysy

smdnsysy1#

根据与开始日期的距离(以月为单位)对行进行分组:

select sum(salary) -- probably also put some interval identification here
from t
where date_column between date '2019-01-05' and date '2019-03-13' -- put startDate and endDate here
group by trunc(months_between(date_column, date '2019-01-05')) -- put startDate here
gmol1639

gmol16392#

我只需要减去4天,然后提取月份:

select trunc(date - interval 4 day, 'MON') as yyyymm, sum(salary)
from t
group by trunc(date - interval 4 day, 'MON')
order by min(date);
``` `trunc()` 与 `'MON'` 参数将日期截断为月初。也可以将值转换为字符串:

select to_char(date - interval 4 day, 'YYYY-MM') as yyyymm, sum(salary)
from t
group by to_char(date - interval 4 day, 'YYYY-MM')
order by min(date);

nmpmafwu

nmpmafwu3#

java.time文件

如何找到截止日期:

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("d-[MMMM][MMM]-uuuu", Locale.ENGLISH);

    String inputStartDate = "5-Jan-2019";
    String inputEndDate = "13-March-2019";

    LocalDate startDate = LocalDate.parse(inputStartDate, inputFormatter);
    LocalDate endDate = LocalDate.parse(inputEndDate, inputFormatter);

    LocalDate[] cutDates = startDate.datesUntil(endDate, Period.ofMonths(1))
            .toArray(LocalDate[]::new);

    System.out.println("Cut dates: " + Arrays.toString(cutDates));

输出为:
截止日期:【2019-01-05、2019-02-05、2019-03-05】
现在,您可以查询oracle数据库中从一个剪切日期(包含)到下一个剪切日期(独占),最后从最后一个剪切日期到结束日期(包含或独占,具体取决于您的要求)的每个时间间隔。
如果开始日期是一个月的29日、30日或31日,结果可能会有点出乎意料。例如:

String inputStartDate = "31-Jan-2019";
    String inputEndDate = "9-April-2019";

截止日期:【2019-01-31、2019-02-28、2019-03-31】
一个挑战是解析日期,因为有时你会得到一个月的缩写(一月而不是一月),有时是一个完整的月名(三月,而不是三月)。格式模式字符串中的方括号表示可选的部分,因此我们的格式化程序将接受一个完整的月份名 MMMM 或缩写通过 MMM .
如何通过考试 LocalDate 对象可以查看底部的链接。

链接

oracle教程:date time解释如何使用java.time。
将java.time.localdate对象插入sql数据库(如h2)或从中提取java.time.localdate对象

相关问题