Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #81708
    leo_jf
    Participante

      Fala galera, tudo bom.
      Nao tive tempo de ler o que vcs responderam sobre minha pergunta, mas ao final do dia vou ler.
      Mas, novamente, peço outra ajuda.
      Preciso buscar no meu select uma informação.
      select…. acesso >= TO_DATE(’16/04/2008′,’DD/MM/YYYY’)
      e que também seja < do que sysdate, ou seja, Quero buscar na tabela os registros maiores que uma certa data, como exemplo, 16/04 para que nao busca dados muito antigos E que seja com data maior do que a do dia que rodei a aplicação. SYSDATE. Ou seja, quero buscar que não podem ser menores que uma certa data, pois estaria buscando dados muito antigo, o que não me interessa e que sejam maiores que o dia que eu executar a procedure, ou seja, maiores que sysdate. Alguem teria uma dica?

      #81714
      Marcio68Almeida
      Participante

        Na verdade, o que você procura são dados que estejam ENTRE duas datas…
        Você poderia usar o BETWEEN, porém ele inclui as extremidades.
        O mais simples é você colocar :
        Select *
        From tabela
        Where to_char (data, 'yyyymmdd') >= '20080416'
        And to_char (data, 'yyyymmdd') < to_char (sysdate, 'yyyymmdd')

        #81717
        santosclay
        Participante

          Olá pessoal.

          Na minha opinião acho que se o tipo da coluna da data é date o código abaixo seria melhor em relação a custo uma fez que não será necessária a conversão de campos e tipos para comparação:

          Código:

          SELECT *
          FROM TABELA TABELA
          WHERE TABELA.DATA BETWEEN TO_DATE('16/04/2008', 'DD/MM/YYYY') AND TO_DATE(SYSDATE - 1, 'DD/MM/YYYY')

          O custo do código abaixo é maior devido a necessidade de conversões, caso o tipo do campo data seja date. Se o tipo do for campo varchar2 o exemplo anterior será mais lento.
          Código:

          SELECT *
          FROM TABELA
          WHERE TO_CHAR (DATA, 'YYYYMMDD') >= '20080416'
          AND TO_CHAR (DATA, 'YYYYMMDD') < TO_CHAR (SYSDATE, 'YYYYMMDD')

          Logo execute um explain para avaliar os custos e utilize as sugetões (Minha ou do Marcio) em função do tipo do campo data na tabela.

          Abraços Clayton.

          #81718
          santosclay
          Participante

            Errata:

            Mude o trecho em destaque

            SELECT *
            FROM TABELA TABELA
            WHERE TABELA.DATA BETWEEN TO_DATE(’16/04/2008′, ‘DD/MM/YYYY’) AND TO_DATE(SYSDATE – 1, ‘DD/MM/YYYY’)

            Para:

            SELECT *
            FROM TABELA TABELA
            WHERE TABELA.DATA BETWEEN TO_DATE(’16/04/2008′, ‘DD/MM/YYYY’) AND SYSDATE – 1

            Cometi o erro de converter date pra date.

            Abraços Clayton.

            #81719
            santosclay
            Participante

              Errata:

              Mude o trecho em destaque

              SELECT *
              FROM TABELA TABELA
              WHERE TABELA.DATA BETWEEN TO_DATE(’16/04/2008′, ‘DD/MM/YYYY’) AND TO_DATE(SYSDATE – 1, ‘DD/MM/YYYY’)

              Para:

              SELECT *
              FROM TABELA TABELA
              WHERE TABELA.DATA BETWEEN TO_DATE(’16/04/2008′, ‘DD/MM/YYYY’) AND SYSDATE – 1

              Cometi o erro de converter date pra date.

              Abraços Clayton.

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