Pular para o conteúdo
  • Este tópico contém 13 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 3 meses atrás por santosclay.
Visualizando 14 posts - 1 até 14 (de 14 do total)
  • Autor
    Posts
  • #82916
    marsola2k
    Participante

      Pessoal,

      Existe alguma maneira de eu realizar uma pesquisa um mes e trazer o mes atual e os ultimos 12 meses ??

      Valew

      #82918
      Ishii
      Participante

        Olá,

        Acho melhor colocar um exemplo com as condições da query, pois pelo que você descreveu daria sim… mas sem um detalhe maior não fica fácil ajudar

        []s Ishii

        #82919
        Marcio68Almeida
        Participante

          Basicamente é você usar o recurso (SYSDATE – n)
          Mas tem que dar uma idéia do que você quer fazer…

          #82925
          santosclay
          Participante

            Olá Marsola2k tudo bem.

            Acredito que a função TO_DATE(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -14), ‘DD/MM/YYYY’) incluída em uma claúla where te ajude!!
            Ex:

            SELECT *
            FROM TABELA
            WHERE DATA_ALGUMA_COISA >= TO_DATE(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -14), 'DD/MM/YYYY');

            Explicação.

            Rode o script abaixo:


            SELECT SYSDATE AS "DIA ATUAL",
            LAST_DAY(SYSDATE) AS "ULTIMO_DIA_DO_MES",
            ADD_MONTHS(SYSDATE, -12) AS "FUNCAO_ADD_MONTHS",
            ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -14) AS "TADAAAA"
            FROM DUAL;

            Descrição dos resultados (Campos)

            DIA_ATUAL = O Comando SYSDATE retorna a data atual do banco (quem vem do SO certo!!!).

            ULTIMO_DIA_DO_MES = O Comando LAST_DAY retorna o último dia do mes a partir de uma data informada.
            Utilizando a o comando da seguinte forma LAST_DAY(TO_DATE(’14/07/2008′, ‘DD/MM/YYYY’)) o retorno será 31/08/2008.

            FUNCAO_ADD_MONTHS = Comando ADD_MONTHS(DATE, INTEGER). Onde DATE seria uma data (ex: 14/07/2008) e integer quantidade de meses somados a data (Ex: 1)
            Utilizando a o comando da seguinte forma ADD_MONTHS(TO_DATE(’14/07/2008′, ‘DD/MM/YYYY’), 1) o retorno será 14/08/2008.
            Este comando aceita números inteiros negativos (ou seja a quantidade de meses que você quer subtrair)

            TADAAAA (Em homenagem a mágica do lápis que o Coringa fez em O Cavaleiro das Trevas)
            Uma jogada para resolver o problema e atender a sua necessidade foi a junção das duas funções para obter de maneira dinâmica a data inicial.

            Abraços e qualquer coisa é só falar.

            Clayton

            #82945
            marsola2k
            Participante

              Ola Clayton

              O que eu fiz foi o seguinte !

              Fiz uma consulta que retorna para mim o dia formatado, conforme a query abaixo


              SELECT TO_DATE(DD_FECHTO || '/' || TO_CHAR(sysdate, 'MM/yyyy'), 'dd/MM/yyyy') AS DT_FCH
              FROM TB_EMPRESA_FECHTO
              WHERE cd_empresa = 1

              Mas em cima do que vc postou, vou ver se eu gero o que eu quero, que é a data atual + os 12 meses que se passaram !

              Obrigado

              Abs

              #82960
              santosclay
              Participante

                Simplemente usando esse comando:


                TO_DATE(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -14), 'DD/MM/YYYY');

                Você resolve seu problema.

                Abraços Clayton[/code]

                #83132
                marsola2k
                Participante

                  Clayton

                  Desculpe a santa ignorancia ! Mas como eu coloco o nome da coluna nessa sintaxe ?

                  Abs

                  #83136
                  santosclay
                  Participante

                    E ai blz!!!

                    Substitua o sysdate pelo nome do campo que possui a data.

                    de:

                    TO_DATE(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -14), 'DD/MM/YYYY');

                    Para:

                    TO_DATE(ADD_MONTHS(LAST_DAY(NOME_DO_CAMPO) + 1, -14), 'DD/MM/YYYY');

                    Abraços Clayton.
                    P.S.”Poste depois no forúm se o problema foi resolvido”

                    #83138
                    marsola2k
                    Participante

                      Deu um erro !

                      Dados inconsistentes !

                      Esperava Date obteve Number

                      Abs

                      #83139
                      santosclay
                      Participante

                        Por favor.

                        Você poderia postar a query ou trecho que esta com problemas, assim como o tipo do campo que vc colocou no lugar do sysdate?

                        Abraços Clayton.

                        #83140
                        marsola2k
                        Participante

                          Clayton

                          Minha query é essa


                          SELECT TO_DATE(DD_FECHTO || '/' || TO_CHAR(sysdate, 'MM/yyyy'), 'dd/MM/yyyy') AS DT_FCH FROM TB_EMPRESA_FECHTO WHERE empresa = 10

                          #83141
                          santosclay
                          Participante

                            Esse campo DD_FECHTO é de tipo (Number, VarChar2)?

                            Abraços Clayton.

                            #83142
                            marsola2k
                            Participante

                              Sim

                              #83144
                              santosclay
                              Participante

                                Desculpe-me fui infeliz na minha pergunta.

                                Para que eu possa te ajudar preciso saber de que tipo é o campo DD_FECHTO.

                                Digamos que ele seja um NUMBER.

                                O código abaixo não vai funcionar:

                                SELECT TO_DATE(DD_FECHTO || '/' || TO_CHAR(sysdate, 'MM/yyyy'), 'dd/MM/yyyy') AS DT_FCH FROM TB_EMPRESA_FECHTO WHERE empresa = 10

                                Pois a função TO_DATE precisa receber uma string no primeiro parametro. Logo o erro pode estar rolando pois não dá pra concatenar um number em um char


                                DD_FECHTO || '/' || TO_CHAR(sysdate, 'MM/yyyy').

                                Neste caso o problema se resolveria convertendo o campo DD_FECHTO para char. Uma possível saída seria


                                TO_CHAR(DD_FECHTO) || '/' || TO_CHAR(sysdate, 'MM/yyyy').

                                Abaixo exemplo completo.


                                SELECT TO_DATE(TO_CHAR(DD_FECHTO) || '/' || TO_CHAR(sysdate, 'MM/yyyy'), 'dd/MM/yyyy') AS DT_FCH FROM TB_EMPRESA_FECHTO WHERE empresa = 10

                                Um grande abraço.

                                Clayton.

                                P.S.”Caso este não seja o seu caso por favor poste a respota da pergunta inicial para que possamos solucionar o post”.

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