Fala feras!!!
Bom, eu tenho q montar um script que me retorne qts dias, meses e anos tem a partir de uma data até hj, juro que procurei no fórum, mas não encontrei, se alguém puder me dar uma luz, eu agradeço. Um abraço!!
Contar dia,meses e ano
-
- Rank: Analista Júnior
- Mensagens: 82
- Registrado em: Ter, 26 Fev 2008 11:33 am
- Localização: MG e SP
De uma olhada nessa Funcao SQL, depois faça as conversoes necessarias em ano ou em dia ate chegar no que você precisa.
Espero que ajude.
Abraço
SELECT MONTHS_BETWEEN ('27/12/2009', '25/07/2008') AS DIFERENCA EM MESES -- Devolve a diferença em meses entre as datas "data1" e "data2".
FROM DATAS;
Abraço
-
- Rank: Analista Júnior
- Mensagens: 99
- Registrado em: Qui, 02 Ago 2007 3:06 pm
- Localização: sp
Érico Balboa
A pergunta mais cretina é aquela que não é feita
A pergunta mais cretina é aquela que não é feita
Então cara eu conheço essa função, mas o problema é q eu tenho q calcular o valor exato de dias para dividir os meses pelos dias.
Bom, vou explicar o q eu preciso com mais detalhes, é um cadastro de PACIENTES, eu vou pegar a data de Nascimento do Paciente e com o Sysdate eu vou calcular a Idade em dias. Por exemplo: Uma pessoa que nasceu no dia 20/03/1927 está fazendo o cadastro no dia 26/02/2008, então nesse dia ela tem 80anos 11meses e 6dias. então não posso usar valores padrões para meses(30 dias) e ano(365 dias).
Bom, é isso, se alguém souber de como eu posso começar essa função, eu agradeço. Um abraço.
Bom, vou explicar o q eu preciso com mais detalhes, é um cadastro de PACIENTES, eu vou pegar a data de Nascimento do Paciente e com o Sysdate eu vou calcular a Idade em dias. Por exemplo: Uma pessoa que nasceu no dia 20/03/1927 está fazendo o cadastro no dia 26/02/2008, então nesse dia ela tem 80anos 11meses e 6dias. então não posso usar valores padrões para meses(30 dias) e ano(365 dias).
Bom, é isso, se alguém souber de como eu posso começar essa função, eu agradeço. Um abraço.
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Testei +-, mas aparentemente está retornando os resultados corretamente (não considerei horas, e comparei sempre com sysdate)
select trunc(months_between(trunc(sysdate), dat_nascimento) / 12) anos
, trunc(mod(months_between(trunc(sysdate), dat_nascimento), 12)) meses
, round
(
(
(mod(months_between(trunc(sysdate), dat_nascimento), 12))
-
trunc(mod(months_between(trunc(sysdate), dat_nascimento), 12))
) * ((last_day(trunc(sysdate))) - (trunc(sysdate, 'mm')))
)
dias
from
(
select to_date('19821229', 'yyyymmdd') dat_nascimento
from dual
) i
-
- Rank: Analista Júnior
- Mensagens: 99
- Registrado em: Qui, 02 Ago 2007 3:06 pm
- Localização: sp
Érico Balboa
A pergunta mais cretina é aquela que não é feita
A pergunta mais cretina é aquela que não é feita
É isso mesmo q eu preciso, comparando com sysdate.
Eu fiz alguns testes a maioria bateu, mas vou trabalhar na sua lógica aqui e ver se eu consigo melhorá-la, muito obrigado mesmo hein cara, um abraço!!
Eu fiz alguns testes a maioria bateu, mas vou trabalhar na sua lógica aqui e ver se eu consigo melhorá-la, muito obrigado mesmo hein cara, um abraço!!
Esse código é perfeito para anos e meses, todavia apresenta erros em relação ao cáculo dos dias, caso o mês anterior ao sysdate tenha número de dias diferente de 30, ou seja, caso o mês anterior ao sysdate tenha 28, 29 ou 31 dias.
Resolvi fazendo substituindo a coluna dias por dias2. Vejam como ficou:
Resolvi fazendo substituindo a coluna dias por dias2. Vejam como ficou:
select
TRUNC(MONTHS_BETWEEN(TRUNC(DT.DATA_2), DT.DATA_1)/12 ) ANOS,
trunc(mod(months_between(trunc(dt.DATA_2),dt.DATA_1), 12)) meses,
round (
(
(mod(months_between(trunc(dt.DATA_2), dt.DATA_1), 12))
-
(trunc(mod(months_between(trunc(dt.DATA_2), dt.DATA_1), 12)))
)
*
(
(last_day(trunc(dt.DATA_2))) - (trunc(dt.DATA_2, 'mm'))
)
) dias,
(trunc(dt.DATA_2)-(add_months(dt.DATA_1, trunc(months_between(trunc(dt.DATA_2), dt.DATA_1)/12 )*12+trunc(mod(months_between(trunc(dt.DATA_2),dt.DATA_1), 12)) ) )) dias2
/* dias2 difere de dias em razão de o mês anterior ao mês corrente ser mês com número de dias diferente de 30 */
from
(
select TO_DATE('20130228', 'yyyymmdd') DATA_1,
TO_DATE('20130301', 'yyyymmdd') DATA_2
from dual
) dt;
-
- Rank: Analista Pleno
- Mensagens: 128
- Registrado em: Sáb, 18 Nov 2006 11:51 am
- Localização: Rio de Janeiro - RJ
Pessoal,
Vale a pena dar uma olhada no link abaixo:
http://glufke.net/oracle/viewtopic.php? ... 992#p38992
Ver a partir da function Z_TIMESTAMP_DIF.
Abs
Vale a pena dar uma olhada no link abaixo:
http://glufke.net/oracle/viewtopic.php? ... 992#p38992
Ver a partir da function Z_TIMESTAMP_DIF.
Abs
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 1 visitante