Que DAYS_BETWEEN Calcule los dias sobre 360 Días

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.

Hola @camilog, nativamente no eh visto una funcion que lo haga, al menos no la vi en su listado:
https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.03/en-US/20a61f29751910149f99f0300dd95cd9.html

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

Saludos,

2 Me gusta

Cordial saludo Willy, estuve haciendo las pruebas con Hana pero no funciono.

Hola

y si agregas un WHERE DAYS_BETWEEN(…) > 360

Buena tarde no se si la sintaxis de hana difiera mucho a SQL , pero te comparto un Transact tal vez lo puede adaptar para lo que necesitas.

Declare @FechaIni SmallDateTime
Declare @FechaFin SmallDateTime

Set @FechaIni=‘20180101’
Set @FechaFin=‘20190101’

Declare @nDiasTotales Int


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

Select @nDiasTotales

Cordial saludo compañero

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;

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.