Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Conaulta entre datas

  StringBuilder hql = new StringBuilder();
    hql.append(" FROM ").append(Declaracao.class.getSimpleName()).append(" dcl ");
    hql.append(" WHERE 1 = 1 ");
    if (filtro.getDataDeclaracao() != null) {
        if (filtro.getDataDeclaracao().getDe() != null) {
            hql.append(" AND dcl.dataCadastro >= :dataDeclaracaoDe ");
            parametros.put("dataDeclaracaoDe", filtro.getDataDeclaracao().getDe());
        }
        if (filtro.getDataDeclaracao().getAte() != null) {
            hql.append(" AND dcl.dataCadastro <= :dataDeclaracaoAte ");
            parametros.put("dataDeclaracaoAte", filtro.getDataDeclaracao().getAte());
        }
    }

Gerando um SQL similar a este:

select * from DECLARACAO where DEC_DT_CADASTRO >= '07/01/2018' and DEC_DT_CADASTRO <= '07/01/2018'

Mesmo tendo uma declaração com a data de '07/01/2018', ele não retorna nenhum registro.

Mas se a consulta é gerada assim, retorna 1 registro.

select * from DECLARACAO where DEC_DT_CADASTRO >= '07/01/2018' and DEC_DT_CADASTRO <= '08/01/2018'

Banco de dados é Oracle. O que pode de ser ?

4 respostas

O tipo de do campo no banco é data e hora (Timestamp), ou data(Date)? Caso seja data hora, vc está passando um valor como date, possivelmente os minutos e segundos está indo como 00:00, dessa forma passando as duas datas como 07/01/2018 00:00:00, o registro não é localizado, por estar com o horário diferente e ao passar 08/01/2018 00:00:00 ele retorna.

Campo é do tipo Date.

Se o campo for Date, tente realizar a consulta da seguinte forma:

select * from DECLARACAO where DEC_DT_CADASTRO >= '20180107' and DEC_DT_CADASTRO <= '20180108'
solução!

Resolvi assim: com o trunc

     StringBuilder hql = new StringBuilder();
    hql.append(" FROM ").append(Declaracao.class.getSimpleName()).append(" dcl ");
    hql.append(" WHERE 1 = 1 ");
    if (filtro.getDataDeclaracao() != null) {
        if (filtro.getDataDeclaracao().getDe() != null) {
            hql.append(" AND trunc(dcl.dataCadastro) >= :dataDeclaracaoDe ");
            parametros.put("dataDeclaracaoDe", filtro.getDataDeclaracao().getDe());
        }
        if (filtro.getDataDeclaracao().getAte() != null) {
            hql.append(" AND trunc(dcl.dataCadastro) <= :dataDeclaracaoAte ");
            parametros.put("dataDeclaracaoAte", filtro.getDataDeclaracao().getAte());
        }
    }