Quantcast
Channel: SCN: Message List - SAP HANA Developer Center
Viewing all articles
Browse latest Browse all 9165

Re: Exact Months between two dates

$
0
0

Can you try using the below scalar UDF..

 

 

 

 

CREATE FUNCTION NIT_SCN.MONTHS_BETWEEN(FDATE DATE,TDATE DATE)

RETURNS DIFF DECIMAL(10,8)

LANGUAGE SQLSCRIPT

SQL SECURITY INVOKER

DEFAULT SCHEMA NIT_SCN AS

BEGIN

 

  SELECT MON_DIFF +

        CASE WHEN :FDATE <= :TDATE THEN

                  CASE WHEN :FDATE = LAST_DAY(:FDATE) THEN

                            DAYS_BETWEEN(LFDATE,:TDATE)/(DAYS_BETWEEN(LFDATE,LAST_DAY(ADD_MONTHS(LFDATE,1))))

                       ELSE

                            DAYS_BETWEEN(LFDATE,:TDATE)/DAYS_BETWEEN(LFDATE,ADD_MONTHS(LFDATE,1))

                  END

             ELSE

              CASE WHEN :FDATE = LAST_DAY(:FDATE) THEN

                        DAYS_BETWEEN(LFDATE,:TDATE)/(DAYS_BETWEEN(LFDATE,LAST_DAY(ADD_MONTHS(LFDATE,-1)))) * -1

                   ELSE

                        DAYS_BETWEEN(LFDATE,:TDATE)/DAYS_BETWEEN(LFDATE,ADD_MONTHS(LFDATE,-1)) * -1

              END

        END INTO DIFF

  FROM

  (

  SELECT ((TYEAR - FYEAR) * 12) + (TMON - FMON) AS MON_DIFF,

        CASE WHEN :FDATE = LAST_DAY(:FDATE) THEN

        LAST_DAY(ADD_MONTHS(:FDATE, (((TYEAR - FYEAR) * 12) + (TMON - FMON))))

        ELSE

            ADD_MONTHS(:FDATE, (((TYEAR - FYEAR) * 12) + (TMON - FMON)))

        END AS LFDATE

  FROM

  (

  SELECT MONTH(:FDATE) AS FMON,

        YEAR(:FDATE) AS FYEAR,

        CASE WHEN :FDATE < :TDATE AND :FDATE = LAST_DAY(:FDATE) AND :TDATE != LAST_DAY(:TDATE) THEN MONTH(:TDATE) - 1

             WHEN :FDATE < :TDATE AND TO_CHAR(:TDATE,'DD') < TO_CHAR(:FDATE,'DD') THEN MONTH(:TDATE) - 1

             WHEN :FDATE > :TDATE AND TO_CHAR(:TDATE,'DD') > TO_CHAR(:FDATE,'DD') THEN MONTH(:TDATE) + 1

             ELSE MONTH(:TDATE)

        END AS TMON,

        YEAR(:TDATE) AS TYEAR

  FROM DUMMY

  )

  );

 

 

END;

 

 

Regards,

Nithin


Viewing all articles
Browse latest Browse all 9165

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>