java中0的问题(依据0统计数量时出错)? 400 报错
大侠们:
我使用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++; } } }
该问题自己解决了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。