- Este tópico contém 13 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 3 meses atrás por santosclay.
-
AutorPosts
-
26 de setembro de 2008 às 4:16 pm #82916marsola2kParticipante
Pessoal,
Existe alguma maneira de eu realizar uma pesquisa um mes e trazer o mes atual e os ultimos 12 meses ??
Valew
26 de setembro de 2008 às 4:20 pm #82918IshiiParticipanteOlá,
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
26 de setembro de 2008 às 4:48 pm #82919Marcio68AlmeidaParticipanteBasicamente é você usar o recurso (SYSDATE – n)
Mas tem que dar uma idéia do que você quer fazer…26 de setembro de 2008 às 8:06 pm #82925santosclayParticipanteOlá 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
30 de setembro de 2008 às 4:11 pm #82945marsola2kParticipanteOla 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
1 de outubro de 2008 às 12:54 am #82960santosclayParticipanteSimplemente usando esse comando:
TO_DATE(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -14), 'DD/MM/YYYY');
Você resolve seu problema.
Abraços Clayton[/code]
10 de outubro de 2008 às 4:20 pm #83132marsola2kParticipanteClayton
Desculpe a santa ignorancia ! Mas como eu coloco o nome da coluna nessa sintaxe ?
Abs
10 de outubro de 2008 às 4:48 pm #83136santosclayParticipanteE 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”10 de outubro de 2008 às 4:55 pm #83138marsola2kParticipanteDeu um erro !
Dados inconsistentes !
Esperava Date obteve Number
Abs
10 de outubro de 2008 às 5:02 pm #83139santosclayParticipantePor 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.
10 de outubro de 2008 às 5:10 pm #83140marsola2kParticipanteClayton
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
10 de outubro de 2008 às 5:22 pm #83141santosclayParticipanteEsse campo DD_FECHTO é de tipo (Number, VarChar2)?
Abraços Clayton.
10 de outubro de 2008 às 5:28 pm #83142marsola2kParticipanteSim
10 de outubro de 2008 às 5:46 pm #83144santosclayParticipanteDesculpe-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”.
-
AutorPosts
- Você deve fazer login para responder a este tópico.