Cordial saludo compañeros
Tengo esta duda en SAP HANNA, quiero usar el siguiente codigo para calcular los dias que hay entre 2 fechas:
SELECT DAYS_BETWEEN (TO_DATE (‘2017-09-22’, ‘YYYY-MM-DD’),
TO_DATE(‘2018-11-20’, ‘YYYY-MM-DD’)) “days between” FROM DUMMY;
Puntualmente la duda es que quiero que se haga siempre el calculo sobre 360 dias y no se como debería hacer este ajuste. Espero me puedan colaborar.
Lo que te sugiero es hacer una funcion, primero deberias sacar la diferencia en meses, y esto lo multiplicas por 30, y luego la diferencia de los dias restantes para sumarle, pero claro esto tiene su logica para sacarlo, mira te paso un ejemplo de un sql:
select case
when (day(Startdate)>=30 or Startdate=last_day(Startdate) then
case
when(day(Enddate)>=30) then
30*(12*(year(Enddate)-year(Startdate))+month(Enddate)-month(Startdate))
else
30*(12*(year(Enddate)-year(Startdate))+month(Enddate)-month(Startdate))+days(Enddate)-30
end
else
30*(12*(year(Enddate)-year(Startdate))+month(Enddate)-month(Startdate))+days(Enddate)-days(Startdate)
end
Declare @FechaIniFin SmallDateTime
Declare @nDias1 Int
Declare @nDias2 Int
Declare @nDias3 Int
Declare @nControlMes Int
Set @FechaIniFin=DateAdd(m, 1, Cast(Left(Convert(Char(8),@FechaIni,112),6)+‘01’ As SmallDateTime))
Set @nDias1 = 0
Set @nDias2 = 0
Set @nDias3 = 0
Set @nDiasTotales = 0
Set @nControlMes = 0
If MONTH(@FechaIni)=MONTH(@FechaFin) And YEAR(@FechaIni)=YEAR(@FechaFin)
Begin
If DAY(@FechaIni)=1 And DATEDIFF(m,@FechaFin,@FechaFin+1)=1
Set @nDiasTotales=30
Else
Set @nDiasTotales=DATEDIFF(d,@FechaIni,@FechaFin) + 1
End
Else
Begin
If DAY(@FechaIni)<>1 Set @nDias1=DATEDIFF(d,@FechaIni,@FechaIniFin)
If DAY(@FechaIni)<>1 Set @nControlMes = 1
If DATEDIFF(m,@FechaFin,@FechaFin+1)=1 Set @nControlMes = 0
If DATEDIFF(m,@FechaFin,@FechaFin+1)=0 Set @nDias3 = Day(@FechaFin)
Set @nDias2 = (DateDiff(m,@FechaIni,@FechaFin) - @nControlMes) * 30
Set @nDiasTotales=@nDias1 + @nDias2 + @nDias3
End
La adapte a Hana y queda asi, aun sigo haciendo pruebas con mi codigo adicional
SELECT CASE
WHEN (DAYOFMONTH(TO_DATE('2017-08-24','YYYY-MM-DD'))>=30 or TO_DATE('2017-08-24','YYYY-MM-DD')=LAST_DAY(TO_DATE('2017-08-24', 'YYYY-MM-DD'))) then
CASE
WHEN(DAYOFMONTH(TO_DATE('2018-11-20', 'YYYY-MM-DD'))>=30) then
30*(12*(year(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-year(TO_DATE('2017-08-24', 'YYYY-MM-DD')))+month(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-month(TO_DATE('2017-08-24', 'YYYY-MM-DD')))
ELSE
30*(12*(year(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-year(TO_DATE('2017-08-24', 'YYYY-MM-DD')))+month(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-month(TO_DATE('2017-08-24', 'YYYY-MM-DD')))+DAYOFMONTH(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-30
END
ELSE
30*(12*(year(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-year(TO_DATE('2017-08-24', 'YYYY-MM-DD')))+month(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-month(TO_DATE('2017-08-24', 'YYYY-MM-DD')))+DAYOFMONTH(TO_DATE('2018-11-20', 'YYYY-MM-DD'))-DAYOFMONTH(TO_DATE('2017-08-24', 'YYYY-MM-DD'))
END AS DIAS
FROM DUMMY;