Erro de calculo entre datas.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
targinosilveira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 16 Set 2008 5:56 pm
Localização: Fortaleza - CE

Boa noite amigos, agora a tarde fiquei meio confuso com o não resultado de uma simples consulta ao banco usando diferença de datas, o que acontece eu tenho um registo no dia '30/01/2009', agora vou postar o código para que vocês possam me ajudar em alguma coisa.

Com esse código, não me retorna nenhum resultado:

Selecionar tudo

SELECT     codigo_professor, nome_professor, imei_equipamento,
                  TO_CHAR(data_emprestimo, 'DD/MM/YYYY HH24:MI') data_emprestimo, status_emprestimo
FROM       v_situacao_emprestimos
WHERE    data_emprestimo >= TO_DATE('30/01/2009', 'DD/MM/YYYY')
AND      data_emprestimo <= TO_DATE('30/01/2009', 'DD/MM/YYYY') 
AND      codigo_escola = 1234567891 
E dessa seguinte maneira com o BETWEEN:

Selecionar tudo

SELECT     codigo_professor, nome_professor, imei_equipamento,
           TO_CHAR(data_emprestimo, 'DD/MM/YYYY HH24:MI') data_emprestimo, status_emprestimo
FROM       v_situacao_emprestimos
WHERE    data_emprestimo BETWEEN TO_DATE('30/01/2009', 'DD/MM/RRRR')
AND      TO_DATE('30/01/2009', 'DD/MM/RRRR')
AND      codigo_escola = 1234567891
ORDER BY nome_professor

Mas da seguinte forma ele traz o único registro do dia '30/01/2009'

Selecionar tudo

SELECT     codigo_professor, nome_professor, imei_equipamento,
           TO_CHAR(data_emprestimo, 'DD/MM/YYYY HH24:MI') data_emprestimo, status_emprestimo
FROM       v_situacao_emprestimos
WHERE    data_emprestimo >= TO_DATE('30/01/2009', 'DD/MM/YYYY')
AND      data_emprestimo <= TO_DATE('30/01/2009', 'DD/MM/YYYY') + 1
AND      codigo_escola = 1234567891
Ou da seguinte forma ele também traz:

Selecionar tudo

SELECT     codigo_professor, nome_professor, imei_equipamento,
           TO_CHAR(data_emprestimo, 'DD/MM/YYYY HH24:MI') data_emprestimo, status_emprestimo
FROM       v_situacao_emprestimos
WHERE    data_emprestimo BETWEEN TO_DATE('30/01/2009', 'DD/MM/RRRR')
AND      TO_DATE('30/01/2009', 'DD/MM/RRRR') + 1
AND      codigo_escola = 1234567891
ORDER BY nome_professor
Abraços a todos!
margaridi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Ter, 08 Abr 2008 11:09 am
Localização: Curitiba - PR
Contato:
----------------------------
Margaridi, Marco Aurélio
www.margaridi.com

Nas duas comparações iniciais você estará procurando registros gravados exclusivamente as 00:00:00 do dia 30/01/2009.
Para que o seu select funcione corretamente você precisa procurar os registros gravados entre 00:00:00 e 23:59:59 (ou 0.99999), conforme exemplo:

Selecionar tudo

SELECT     codigo_professor, nome_professor, imei_equipamento, 
                  TO_CHAR(data_emprestimo, 'DD/MM/YYYY HH24:MI') data_emprestimo, status_emprestimo 
FROM       v_situacao_emprestimos 
WHERE    data_emprestimo >= TO_DATE('30/01/2009', 'DD/MM/YYYY') 
AND      data_emprestimo <= TO_DATE('30/01/2009', 'DD/MM/YYYY') + 0.99999
AND      codigo_escola = 1234567891 
[/code]
targinosilveira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 16 Set 2008 5:56 pm
Localização: Fortaleza - CE

Nas duas comparações iniciais você estará procurando registros gravados exclusivamente as 00:00:00 do dia 30/01/2009.
Para que o seu select funcione corretamente você precisa procurar os registros gravados entre 00:00:00 e 23:59:59 (ou 0.99999), conforme
Bom dia Marco, muito obrigado pela ajuda, então esse erro deu-se por causa do campo ser do tipo timestamp. Correto?

Abraços!
Gibson
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 11 Nov 2008 6:44 pm
Localização: São Paulo

Cara, acho que é mais simples se você truncar a data_emprestimo.

Fica assim:

Selecionar tudo

SELECT     codigo_professor, nome_professor, imei_equipamento,
                  TO_CHAR(data_emprestimo, 'DD/MM/YYYY HH24:MI') data_emprestimo, status_emprestimo
FROM       v_situacao_emprestimos
WHERE    TRUNC(data_emprestimo) = TO_DATE('30/01/2009', 'DD/MM/YYYY')
AND      codigo_escola = 1234567891 
targinosilveira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 16 Set 2008 5:56 pm
Localização: Fortaleza - CE

beleza chefe, também funfou legal!

Abraços!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 20 visitantes