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

      Pessoal,

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

      Valew

      #82918
      Avatar de IshiiIshii
      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
        Avatar de Marcio68AlmeidaMarcio68Almeida
        Participante

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

          #82925
          Avatar de santosclaysantosclay
          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
            Avatar de marsola2kmarsola2k
            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
              Avatar de santosclaysantosclay
              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
                Avatar de marsola2kmarsola2k
                Participante

                  Clayton

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

                  Abs

                  #83136
                  Avatar de santosclaysantosclay
                  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
                    Avatar de marsola2kmarsola2k
                    Participante

                      Deu um erro !

                      Dados inconsistentes !

                      Esperava Date obteve Number

                      Abs

                      #83139
                      Avatar de santosclaysantosclay
                      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
                        Avatar de marsola2kmarsola2k
                        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
                          Avatar de santosclaysantosclay
                          Participante

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

                            Abraços Clayton.

                            #83142
                            Avatar de marsola2kmarsola2k
                            Participante

                              Sim

                              #83144
                              Avatar de santosclaysantosclay
                              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