請求月とサイトから支払期限日を求めるストアドFUNCTION

MySQL ストアドFUNCTION として請求月とサイト(支払い期限までの日数)から、
支払期限日(DATE型)を求めるものを作ってみました。

請求が末締めで、末日からのサイト(日数)を求めるものとします。
サイト日数の仕様は、1ヶ月を30日として定義して、
30を指定すると、翌月の末日、45を指定すると翌月15日とします。


DELIMITER //
DROP FUNCTION IF EXISTS paylimit_date
//
CREATE FUNCTION paylimit_date(billyear INT, billmonth INT, sitedays INT) RETURNS DATE
BEGIN
  IF sitedays >= 30 THEN
     RETURN
DATE_ADD(
   DATE_ADD(
      DATE_ADD(
         DATE_ADD( STR_TO_DATE(CONCAT_WS('-', billyear, billmonth, 1) , '%Y-%m-%d'), INTERVAL 1 MONTH)
         , INTERVAL TRUNCATE(sitedays / 30, 0) MONTH)
      , INTERVAL -1 DAY)
   , INTERVAL sitedays - (TRUNCATE(sitedays / 30 , 0) * 30) DAY
);
  ELSE
     RETURN DATE_ADD(LAST_DAY(STR_TO_DATE(CONCAT_WS('-', billyear, billmonth, 1) , '%Y-%m-%d')), INTERVAL sitedays DAY);
  END IF;
END
//
DELIMITER ;



DATE_ADDの嵐になってしまいましたが、

  SELECT paylimit_date(2015, 9, 30)

の結果は、 2015-10-31 です。


  SELECT paylimit_date(2015, 9, 45)

の結果は、 2015-11-15 です。