SQL REAJUSTE ANUAL
Mais uma Sql complicada para mim.
Tenho uma data inicial, exemplo:
01/01/2013
preciso aplicar uma consulta varrendo a tabela e o campo Data para mostrar qual sera a data do reajuste de um determinado valor anualmente. Conforme data acima, o proximo reajuste sera em 01/01/2014. Como ficaria esse calculo dentro de uma consulta Sql? E após esse cálculo, mostrar a data que sera aplicada, ou seja, 01/02/2014?
Tenho uma data inicial, exemplo:
01/01/2013
preciso aplicar uma consulta varrendo a tabela e o campo Data para mostrar qual sera a data do reajuste de um determinado valor anualmente. Conforme data acima, o proximo reajuste sera em 01/01/2014. Como ficaria esse calculo dentro de uma consulta Sql? E após esse cálculo, mostrar a data que sera aplicada, ou seja, 01/02/2014?
IRENKO,
Pelo que eu entendi, você precisa pegar a data e somar 1 ano a ela ...
... por exemplo, dispare a linha abaixo dentro do Microsoft SQL Manager Studio:
Retorno: [Ô]2014-01-01 00:00:00.000[Ô]
Depois é pegar esta data e somar 1 mês ou 1 dia? Não entendi ...
Retorno: [Ô]2014-02-01 00:00:00.000[Ô]
Retorno: [Ô]2014-01-02 00:00:00.000[Ô]
é isso que você deseja?
Veja mais em:
http://msdn.microsoft.com/pt-br/library/ms186819.aspx
[][ô]s,
Tunusat.
Pelo que eu entendi, você precisa pegar a data e somar 1 ano a ela ...
... por exemplo, dispare a linha abaixo dentro do Microsoft SQL Manager Studio:
select dateadd(YEAR,1,[ô]2013-01-01[ô])
Retorno: [Ô]2014-01-01 00:00:00.000[Ô]
Depois é pegar esta data e somar 1 mês ou 1 dia? Não entendi ...
select dateadd(MONTH,1,[ô]2014-01-01[ô])
Retorno: [Ô]2014-02-01 00:00:00.000[Ô]
select dateadd(DAY,1,[ô]2014-01-01[ô])
Retorno: [Ô]2014-01-02 00:00:00.000[Ô]
é isso que você deseja?
Veja mais em:
http://msdn.microsoft.com/pt-br/library/ms186819.aspx
[][ô]s,
Tunusat.
só não entendi uma coisa,essa data inicial esta gravada no banco, ou você vai colocar a data programaticamente?
A data ja esta gravada, minha dificuldade é colocar essa pesquisa em uma sql.
Na minha tabela tenho o campo DataInicial, a partir dela tenho que montar um select mostrando a data do reajuste, para esse caso 12 meses e depois somar mais 1 mes onde sera aplicado o reajuste.
exemplo :
Data Inicial : 01/01/2013
Reajuste em: 01/01/2014
Aplicação em : 01/02/2014
exemplo :
Data Inicial : 01/01/2013
Reajuste em: 01/01/2014
Aplicação em : 01/02/2014
Colega, o ideal seria criar uma View e não um select. Mas se prefere Select, pode ser também.
POSTGRES:
MYSQL:
No caso do MySQL acho que serve para o SQLServer também.
Tudo de bom.
POSTGRES:
Select
DataInicial as Data_Inicio_do_Reajuste,
(DataInicial + cast([ô]1 years[ô] as interval))+ cast([ô]1 months[ô] as interval) as Data_Proximo_Reajuste
From
SuaTabelaAqui
MYSQL:
Select
DataInicial as Data_Inicio_do_Reajuste,
DateAdd(MONTH,1,DateAdd(YEAR,1,DataInicial)) as Data_Proximo_Reajuste
From
SuaTabelaAqui
No caso do MySQL acho que serve para o SQLServer também.
Tudo de bom.
Putz! Esqueci de citar que o banco é access! Desculpe-me.
IRENKO,
No Access é assim:
[][ô]s,
Tunusat.
No Access é assim:
SELECT tbBancoDados.CampoData, DateAdd([Ô]yyyy[Ô],1,[CampoData]) AS DataAno, DateAdd([Ô]m[Ô],1,[CampoData]) AS SomaMes, DateAdd([Ô]d[Ô],1,[CampoData]) AS SomaDia
FROM tbBancoDados;
[][ô]s,
Tunusat.
Tunusat, fico grato pela ajuda! Estava eu analisando o problema e achei um bug. Na realidade essa consulta deveria ser feita baseando-se no Dia e Mês da data inicial comparando com os mesmos do Ano atual, ai eu saberia que no ano de 2014 eu teria (n) reajustes, deu pra entender? O select conforme sua sugestão ficou assim:
SELECT Valores.Inicio, DateAdd([Ô]yyyy[Ô],1,[Valores.Inicio]) AS DataAno, DateAdd([Ô]m[Ô],1,[Valores.Inicio]) AS SomaMes, DateAdd([Ô]d[Ô],1,[Valores.Inicio]) AS SomaDia
FROM Valores;
ficou perfeito para o calculo exato exemplo esse é o resultado da sua Sql:
Inicio DataAno SomaMes SomaDia
11/02/2014 11/02/2015 11/03/2014 12/02/2014
Ops! Agora q vi que tem um erro no SomaMes e SomaDia, teria que ser 11/03/2015 e 12/02/2015.
O q eu gostaria seria por exemplo uma data 13/02/1989
no dia 13 do mes 02 do ano de 2014 vai ter o reajuste. Não sei se fui claro. Teria como?
SELECT Valores.Inicio, DateAdd([Ô]yyyy[Ô],1,[Valores.Inicio]) AS DataAno, DateAdd([Ô]m[Ô],1,[Valores.Inicio]) AS SomaMes, DateAdd([Ô]d[Ô],1,[Valores.Inicio]) AS SomaDia
FROM Valores;
ficou perfeito para o calculo exato exemplo esse é o resultado da sua Sql:
Inicio DataAno SomaMes SomaDia
11/02/2014 11/02/2015 11/03/2014 12/02/2014
Ops! Agora q vi que tem um erro no SomaMes e SomaDia, teria que ser 11/03/2015 e 12/02/2015.
O q eu gostaria seria por exemplo uma data 13/02/1989
no dia 13 do mes 02 do ano de 2014 vai ter o reajuste. Não sei se fui claro. Teria como?
IRENKO,
Maravilha!
Precisa fazer a soma do mês em cima do resultado da soma do ano ... acredito que você só precisa pegar o alias [Ô]DataAno[Ô] para fazer isto. Idem para soma dia.
Deve ser isto:
- DateAdd([Ô]m[Ô],1,[DataAno]) AS SomaMes
- DateAdd([Ô]d[Ô],1,[DataAno]) AS SomaDia
Para 1989 a mesma coisa, mas com número negativos. Por exemplo:
- DateAdd([Ô]yyyy[Ô],-25,[Valores.Inicio])
[][ô]s,
Tunusat.
Maravilha!
Precisa fazer a soma do mês em cima do resultado da soma do ano ... acredito que você só precisa pegar o alias [Ô]DataAno[Ô] para fazer isto. Idem para soma dia.
Deve ser isto:
- DateAdd([Ô]m[Ô],1,[DataAno]) AS SomaMes
- DateAdd([Ô]d[Ô],1,[DataAno]) AS SomaDia
Para 1989 a mesma coisa, mas com número negativos. Por exemplo:
- DateAdd([Ô]yyyy[Ô],-25,[Valores.Inicio])
[][ô]s,
Tunusat.
Tópico encerrado , respostas não são mais permitidas