Pular para o conteúdo
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #102915
    Avatar de drigodrigo
    Participante

      Olaa,

      Tenho a necessidade de obter um conjunto de registros que estão num intervalo de datas, mas todos os registros contidos no banco estão no intervalo de: 24/02/2012 à 28/02/2012. Usei o between conforme mostrado abaixo:

      SELECT *
      FROM
      teste.auditoria audit
      WHERE
      audit.data BETWEEN TO_DATE(’24/02/2012′, ‘DD/MM/YYYY’) AND TO_DATE(’28/02/2012′,’DD/MM/YYYY’);

      Mas as datas do dia 28 não foram mostradas, devido a tal fato modifiquei o Select conforme mostrado abaixo:

      SELECT *
      FROM
      teste.auditoria audit
      WHERE
      audit.data BETWEEN TO_DATE(’24/02/2012′, ‘DD/MM/YYYY’) AND TO_DATE(’28/02/2012′,’DD/MM/YYYY’) + 1;

      Depois da Adição do +1 os registros foram obtidos corretamente, segue abaixo algumas dúvidas:

      1) Adicionar o +1 nessa situação é uma má prática ?

      2) Como poderia resolver o respectivo problema sem utilizar o +1 ?

      3) Porque o Between nao considera a data final ?

      Atenciosamente.

      Desde Já, Agradeço.

      #102916
      Avatar de MaxSteelMaxSteel
      Participante

        Drigo,

        o campo audit.data e composto de data ou data e hora?

        #102917
        Avatar de drigodrigo
        Participante

          Olaa,

              É composto por data e hora.
          

          Muito obrigado pela atenção.

          #102918
          Avatar de burgaburga
          Participante

            Oi drigo, do jeito que você fez está quase ok…

            Quando você não coloca hora em uma data o oracle assume que a hora é igual a 00:00:00.

            se as suas horas do dia 28 forem todas acime de 00:00:00 ele não trará.

            Eu disse quase ok porque a cláusula BETWEEN é inclusiva, então supondo que no futuro exista um registro com data igual a 29/02/2012 00:00:00 (que é hoje à meia noite), esse registro também entraria na consulta.

            Então você pode fazer assim:

            WHERE
            audit.data BETWEEN TO_DATE(’24/02/2012′, ‘DD/MM/YYYY’) AND TO_DATE(’28/02/2012 23:59:59′,’DD/MM/YYYY HH24:MI:SS’)

            #102922
            Avatar de MaxSteelMaxSteel
            Participante

              outra coisa que você pode estar fazendo também e truncar a data que não não tenha hora.

              WHERE
              trunc(audit.data) BETWEEN TO_DATE(’24/02/2012′, ‘DD/MM/YYYY’) AND TO_DATE(’28/02/2012′,’DD/MM/YYYY’)

              #102924
              Avatar de burgaburga
              Participante

                [quote=”MaxSteel”:29piky9b]outra coisa que você pode estar fazendo também e truncar a data que não não tenha hora.

                WHERE
                trunc(audit.data) BETWEEN TO_DATE(’24/02/2012′, ‘DD/MM/YYYY’) AND TO_DATE(’28/02/2012′,’DD/MM/YYYY’)[/quote]

                Também pode ser feito, só tem que tomar cuidado porque isso “mata” um suposto índice que existir na coluna. 🙂

                #102925
                Avatar de rmanrman
                Participante

                  @burga

                  É possível criar índice sob função. Mas realmente se o índice for sob a coluna ele não será usado.

                  #102927
                  Avatar de msantinomsantino
                  Participante

                    Usando o to_date() na coluna também é uma opção:

                    ...
                    WHERE TO_DATE(audit.data, 'DD/MM/YYYY') BETWEEN TO_DATE('24/02/2012', 'DD/MM/YYYY') AND TO_DATE('28/02/2012','DD/MM/YYYY')

                    #102929
                    Avatar de burgaburga
                    Participante

                      [quote=”rman”:1pfv8oab]@burga

                      É possível criar índice sob função. Mas realmente se o índice for sob a coluna ele não será usado.[/quote]

                      Eu sei, e também faço uso deles, mas esse normalmente não é o caso, ainda mais no caso de campos date, por isso não disse nada… 🙂

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.
                    plugins premium WordPress