/**********************************************************************/
/* 日にちの差分を求めます。                                           */
/* ただし、マイナス日にちは、０ として返します。                      */
/*          DYDIFF( DATE1,[DATE2],[PLUS] )                            */
/*                                                                    */
/*	  DATE1      IN VARCHAR2  YYYYMMDD 形式 の文字列                  */
/*	 [DATE2]     IN VARCHAR2  YYYYMMDD 形式 の文字列 [本日]           */
/*	 [PLUS]      IN NUMBER    日付け計算時に加算する日数  [=0]        */
/*                                                                    */
/*	 リターン値   DATE1-DATE2+PLUS （0以上の整数）                    */
/*                                                                    */
/*	DATE1とDATE2の差（日数）を求めます。                              */
/*  DATE2をセットしない場合は、本日の日付けで計算します。             */
/*  ガントチャート等の画面表示用の差計算ですので、マイナス値は        */
/*	0 として返します。                                                */
/*  入力の順番にご注意ください。                                      */
/*                                                                    */
/**********************************************************************/
CREATE OR REPLACE FUNCTION DYDIFF(
	DATE1   IN VARCHAR2  ,
	DATE2   IN VARCHAR2 := NULL ,
	PLUS    IN NUMBER   := 0 )
RETURN NUMBER
IS
    RTN     NUMBER(4);

BEGIN

	IF DATE2 IS NULL THEN
		RTN := TO_DATE( SUBSTRB(DATE1,1,8),'YYYYMMDD') - TRUNC(SYSDATE) + PLUS;
	ELSE
		RTN := TO_DATE( SUBSTRB(DATE1,1,8),'YYYYMMDD' ) - TO_DATE( SUBSTRB(DATE2,1,8),'YYYYMMDD' ) + PLUS;
	END IF;

	IF RTN < 0 THEN RTN := 0; END IF;

	RETURN RTN;

END DYDIFF;
/

