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 です。