Java 如何使用特定的日期格式简化和减少sql查询的执行时间?
我使用jdbcTemplate进行以下查询和代码Java 如何使用特定的日期格式简化和减少sql查询的执行时间?,java,sql,spring,oracle,jdbctemplate,Java,Sql,Spring,Oracle,Jdbctemplate,我使用jdbcTemplate进行以下查询和代码 String sql = select count(*) as count ,trunc(fin.fin_date) as dateAndTime from (select * from rec where rec_status='RECEIVED' and fin_date>sysdate-8) fin group by trunc(fin.fin_date) try { return jdbcTemp
String sql = select count(*) as count ,trunc(fin.fin_date) as dateAndTime from (select * from rec where rec_status='RECEIVED' and fin_date>sysdate-8) fin group by trunc(fin.fin_date)
try {
return jdbcTemplate.query(sql, new RowMapper<Chrt>() {
@Override
public Chrt mapRow(ResultSet rs, int rowNum) throws SQLException {
Chrt receive = new Chrt();
java.util.Date date =(rs.getDate("dateAndTime"));
receive.setDate(date.toString());
receive.setCount(rs.getInt("count"));
return receive;
}
});
} catch (DataAccessException e) {
return null;
}
}
它以类似2016-05-19的格式返回日期,但我需要类似2016年5月19日的日期。是否可以在不增加执行时间的情况下获取此格式
如何执行此操作?您可以使用函数代替函数。它将以指定的格式为您提供日期:
String sql = select count(*) as count ,TO_CHAR(fin.fin_date, 'DD-MON-YY') as dateAndTime from (select * from rec where rec_status='RECEIVED' and fin_date>sysdate-8) fin group by TO_CHAR(fin.fin_date, 'DD-MON-YY');
这不会显著影响性能
为了提高性能,我建议您查看查询的查询计划。要查看此计划,只需执行:
EXPLAIN PLAN FOR
select count(*) as count ,TO_CHAR(fin.fin_date, 'DD-MON-YY') as dateAndTime from (select * from rec where rec_status='RECEIVED' and fin_date>sysdate-8) fin group by TO_CHAR(fin.fin_date, 'DD-MON-YY')
在任何oracle sql客户机中,并了解其速度太慢的原因以及如何提高性能。盲目猜测:将索引放在fin_date上,而不是函数,您可以使用该函数。它将以指定的格式为您提供日期:
String sql = select count(*) as count ,TO_CHAR(fin.fin_date, 'DD-MON-YY') as dateAndTime from (select * from rec where rec_status='RECEIVED' and fin_date>sysdate-8) fin group by TO_CHAR(fin.fin_date, 'DD-MON-YY');
这不会显著影响性能
为了提高性能,我建议您查看查询的查询计划。要查看此计划,只需执行:
EXPLAIN PLAN FOR
select count(*) as count ,TO_CHAR(fin.fin_date, 'DD-MON-YY') as dateAndTime from (select * from rec where rec_status='RECEIVED' and fin_date>sysdate-8) fin group by TO_CHAR(fin.fin_date, 'DD-MON-YY')
在任何oracle sql客户机中,并了解其速度太慢的原因以及如何提高性能。盲目猜测:将索引放在fin_date上为什么不使用一个查询而不是两个
select count(*) as count ,TO_CHAR(fin.fin_date, 'DD-MON-YY') as dateAndTime
from rec
where rec_status='RECEIVED' and fin_date>sysdate-8
group by TO_CHAR(fin.fin_date, 'DD-MON-YY');
为什么不使用一个查询而不是两个
select count(*) as count ,TO_CHAR(fin.fin_date, 'DD-MON-YY') as dateAndTime
from rec
where rec_status='RECEIVED' and fin_date>sysdate-8
group by TO_CHAR(fin.fin_date, 'DD-MON-YY');
Java日期有自己的内部表示形式,它不是字符串。Java日期有自己的内部表示形式,它不是字符串。