java统计大于0的个数_java中0的问题(依据0统计数量时出错)

博主在统计航班延误数量时发现,当依据大于等于1的条件进行统计时,Java后台代码和SQL查询结果一致。但当依据0进行统计时,后台代码结果比SQL多出几条数据。问题可能出在时间换算上,关键代码涉及时间差的计算。已提供SQL查询语句和Java核心代码段,初步推测可能是时间转换或比较逻辑导致的误差。
摘要由CSDN通过智能技术生成

大侠们:

我使用sql语句和后台程序代码统计航班数量,如果依据大于等于1的值做统计,他们两个得出的结果是一样的;如果依据0做统计,结果是不一样,谁知道怎么回事(0不是除数)?先谢谢各位了。。。

问题是:比如通过 sql语句统计的结果是60个,那么统计后台程序统计的就是67个,总之,如果依据0来统计,后台程序的结果就比sql语句的结果多几条数据。

我把统计使用的sql语句和核心代码都帖子下面了,如果有不明白的可以留言告诉我

我觉得问题出在时间的换算上

重要的代码是:

long diff = processTime.getTime()

- flight.getSTD().getTime();

int hoursDelayed = (int) (diff / (1000*60*60));

//根据延误的时间长短,与响应的条件进行比对

if (hoursDelayed >= ) {

count++;

}

processTime,它的值为系统当前时间

params.get("FDDT").getThreshold(),它的值为0

该处是统计数量的sql语句:

--数量统计是离港航班 延误 atd为null 过滤掉共享 当日航班 还有一个条件是:拿当前告警处理时间减去std,然后与fddt的时间进行比较

--下面是按照业务逻辑,书写的语句

select count(e.flight_no),e.operation_date,e.flight_no,

sysdate,e.std,

floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24) 小时,

floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60) 分钟,

(to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24

from epms_flight_info e

left join v_epms_flightinfo v

on e.operation_date=v.OPERATION_DATE and e.flight_no=v.FLIGHT_NO and e.aord=v.AORD and e.repeat_count=v.REPEAT_COUNT

where e.Recent_Abnormal_Status='D'

and e.ATD is null

AND e.AORD='D'

and v.CODE_SHARE1 is null

and e.std < to_date(to_char(sysdate+1, 'YYYYMMDD') || '040000', 'YYYYMMDDHH24MISS')

and

floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -

to_date(to_char(e.std,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24) >= 0

group by e.operation_date, e.flight_no, sysdate, e.std,

floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -

to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24),

floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -

to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60),

(to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -

to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24;

该处是统计数量的后台代码:

for (FlightInformation flight : Global.allCacheFlight) {

if (flight.getAbnormalStatus() == null)

continue;

if (flight.getArriveOrDeparture().equals("D")

&& flight.getAbnormalStatus().equals("D")

&& flight.getATD() == null) {

//依次判断航班是否延误

long diff = processTime.getTime()

- flight.getSTD().getTime();

int hoursDelayed = (int) (diff / (1000*60*60));

//根据延误的时间长短,与响应的条件进行比对

if (hoursDelayed >= params.get("FDDT").getThreshold()) {

count++;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值