Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用特定的日期格式简化和减少sql查询的执行时间?_Java_Sql_Spring_Oracle_Jdbctemplate - Fatal编程技术网

Java 如何使用特定的日期格式简化和减少sql查询的执行时间?

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

我使用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 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日期有自己的内部表示形式,它不是字符串。