DATEDIF - 2 つの日付の差を計算

DATEDIF 関数は、指定した構成要素単位で、2 つの完全構成要素の標準日付の差を返します。構成要素は次のいずれかです。

  • 年   DATEDIF で年単位を使用すると、DATEADD の逆の結果が返されます。日付 X から1 年を減算して日付 Y を作成する場合、X と Y の年差は 1 です。2 月 29 日から 1 年を減算すると、結果は 2 月 28 日になります。
  • 月   DATEDIF で月構成要素を使用すると、DATEADD の逆の結果が返されます。日付 X から 1 か月を減算して日付 Y を作成する場合、X と Y の月差は 1 です。to_date が月の最終日である場合、逆数計算規則を保障するために、月差は絶対数で切り上げられる可能性があります。

    入力日付の 1 つまたは両方が月の最終日である場合、この規則が適用されます。これにより、1 月 31 日と 4 月 30 日の月差は、2 か月ではなく 3 か月になります。

  • 平日   平日単位を使用すると、DATEDIF は日付の計算から土曜日と日曜日を除外します。これにより、金曜日と月曜日の差は 1 日になります。
  • 営業日   営業日単位を使用すると、DATEDIF は BUSDAYS パラメータおよび祝日ファイルにより、営業日を決定します。これ以外は無視されます。これにより、月曜日が営業日でない場合、金曜日と火曜日の差は 1 日になります。

DATEDIF は、整数を返します。2 つの日付の差が整数でない場合、DATEDIF は値を切り捨て、次の最大整数値を返します。たとえば、2001 年 3 月 2 日と 2002 年 3 月 1 日の年差は 0 (ゼロ) です。終了日が開始日よりも前である場合、DATEDIF は負の値を返します。

日を基準としない日付 (例、YM または YQ) の差の計算は、DATEDIF 関数を使用せずに、直接実行してください。

ダイアログマネージャでは日付が文字または数値として解釈され、また DATEDIF 関数では基準日からのオフセットとして格納された標準日付を使用する必要があることから、ダイアログマネージャでは DATEDIF 関数を使用しないでください。ただし、入力日付として使用する変数を、基準日からのオフセットに事前に変換した場合を除きます。

詳細は、ダイアログマネージャコマンドからの関数の呼び出しを参照してください。

DATEDIF は、年月日を含む完全な日付形式でのみ有効です。

2 つの日付の差を計算

DATEDIF(from_date, to_date, 'component')

説明

from_date

日付

差を計算する開始日です。年月日を含む完全な日付形式です。

to_date

日付

差を計算する終了日です。

component

文字

次のいずれかを一重引用符 (') で囲んで指定します。

Y - 構成要素「年」を示します。

M - 構成要素「月」を示します。

D - 構成要素「日」を示します。

WD - 構成要素「平日」を示します。

BD - 構成要素「営業日」を示します。

注意:DATEDIF では、結果のフォーマットとして「I8」を使用するため、output 引数は使用されません。

DATEDIF による切り捨て

DATEDIF 関数は、1996 年 3 月 2 日と 1997 年 3 月 1 日の差を計算します。この場合、その差が 1 年未満のために 0 (ゼロ) を返します。

DATEDIF('19960302', '19970301', 'Y')

月計算の使用

次の式は、結果としてマイナス 1 か月を返します。

DATEDIF('19990228', '19990128', 'M')
DATEDIF('19990228', '19990129', 'M')
DATEDIF('19990228', '19990130', 'M')
DATEDIF('19990228', '19990131', 'M')

次の例も参照してください。

DATEDIF( 'March 31 2001', 'May 31 2001', 'M') は、2 を返します。

DATEDIF( 'March 31 2001', 'May 30 2001', 'M') は、1 を返します (May 30 は月末の日付でないため)。

DATEDIF( 'March 31 2001', 'April 30 2001', 'M') は、1 を返します。

2 つの日付の差に基づき平日日数を計算

DATECVT 関数は、HIRE_DATE と DAT_INC 内のレガシー日付を日付フォーマット YYMD に変換します。DATEDIF 関数は、これらの日付フォーマットで、NEW_HIRE_DATE と NEW_DAT_INC の差から平日日数を計算します。

TABLE FILE EMPLOYEE
PRINT FIRST_NAME AND
COMPUTE NEW_HIRE_DATE/YYMD = DATECVT(HIRE_DATE, 'I6YMD', 'YYMD'); AND
COMPUTE NEW_DAT_INC/YYMD = DATECVT(DAT_INC, 'I6YMD', 'YYMD'); AND
COMPUTE WDAYS_HIRED/I8 = DATEDIF(NEW_HIRE_DATE, NEW_DAT_INC, 'WD');
BY LAST_NAME
IF WDAYS_HIRED NE 0
WHERE DEPARTMENT EQ 'PRODUCTION';
END

出力結果は次のとおりです。

LAST_NAME     FIRST_NAME  NEW_HIRE_DATE  NEW_DAT_INC  WDAYS_HIRED
---------     ----------  -------------  -----------  -----------
IRVING        JOAN        1982/01/04     1982/05/14   94
MCKNIGHT      ROGER       1982/02/02     1982/05/14   73
SMITH         RICHARD     1982/01/04     1982/05/14   94
STEVENS       ALFRED      1980/06/02     1982/01/01   414
              ALFRED      1980/06/02     1981/01/01   153