日付フィールドを含む算術演算は、以下のものに限定されています。
日付フィールド・オペランドは、年部分を除いて同じ日付フォーマットである場合に 互換性があります (年部分はウィンドウ表示西暦年でも拡張西暦年でも可能です)。
次の演算は許可されません。
サポートされる加算および減算で日付フィールドを使用した場合の結果を、以下のセクションに示します。
算術演算で日付フィールドを使用する方法については、以下を参照してください。
使用上の注意
次の表は、日付フィールドを使用した場合の結果および加算の互換オペランドを示しています。
| 非日付データの第 2 オペランド | 日付フィールドの第 2 オペランド | |
|---|---|---|
| 非日付データの第 1 オペランド | 非日付データ | 日付フィールド |
| 日付フィールドの第 1 オペランド | 日付フィールド | 許可されない |
結果が受け取りフィールドにどのように保管されるかについては、日付フィールドに関連する算術演算結果の保管を参照してください。
以下のステートメントは、算術演算を実行し、その結果または送り出しフィールドを 1 つ以上の受け取りフィールドに保管します。
MULTIPLY ステートメントでは、GIVING ID だけに日付フィールドを使用することができます。DIVIDE ステートメントでは、GIVING ID または REMAINDER ID だけに日付フィールドを使用することができます。
算術式または算術ステートメントのオペランドであるウィンドウ表示日付フィールドは、ウィンドウ表示日付フィールドのセマンティクスで説明されているように、使用前に拡張されたかのように扱われます。
送り出しフィールドが日付フィールドである場合、受け取りフィールドは互換日付フィールドでなければなりません。 すなわち、ウィンドウ表示西暦年か拡張西暦年の年部分を除けば、 2 つのフィールドの日付フォーマットは同じでなければなりません。
ON SIZE ERROR 節がステートメントに指定されなかった場合には、保管操作はそのステートメントの既存の COBOL 規則に従い、受け取りフィールドと送り出しフィールド (ウィンドウ表示日付フィールド・オペランド、 または結果の自動拡張後) の両方が非日付フィールドであるかのように処理されます。
表 3 は、これらのステートメントが送り出しフィールドの値を受け取りフィールドに 保管する方法を示しています (どちらかのフィールドが日付フィールドである場合)。このセクションでは、保管の実行方法を記述するのに以下の用語を使用します。
サイズ・エラー処理: 2 種類の送り出しフィールドのいずれについても、 送り出しフィールドの想定または実際の年部分が世紀ウィンドウの範囲内であれば、 送り出しフィールドは、年部分の世紀コンポーネントを取り除いた後で受け取りフィールドに保管されます。すなわち、拡張西暦年部分の下位または右端の 2 桁は保持され、上位または左端の 2 桁は破棄されます。
年部分が世紀ウィンドウの範囲内にない場合、 受け取りフィールドは変更されず、 残りの算術演算が完了した時点でサイズ・エラー命令ステートメントが実行されます。
以下に例を示します。
77 DUE-DATE PICTURE 9(5) DATE FORMAT YYXXX.
77 IN-DATE PICTURE 9(8) DATE FORMAT YYYYXXX VALUE 1995001.
...
COMPUTE DUE-DATE = IN-DATE + 10000
ON SIZE ERROR imperative-statement
END-COMPUTE
送り出しフィールドは拡張日付フィールドで、2005 年 1 月 1 日を表します。2005 が世紀ウィンドウの範囲内であるとすると、 DUE-DATE に保管される値は 05001 です (世紀コンポーネント 20 がない場合は 2005001 の送り出し値)。
サイズ・エラー処理とトリガー値: DATEPROC(TRIG) コンパイラー・オプションが有効であり、 送り出しフィールドの内容がトリガー値 (0 または全桁 9) である場合、 サイズ・エラー命令ステートメントが実行され、結果は受け取りフィールドに保管されません。
非日付データは、推定日付フォーマットのすべての桁位置が 9 の場合、 全桁 9 のトリガー値であるとみなされます。 したがって、受け取り側の日付フォーマットが YYXXX の場合、非日付データ値 99,999 はトリガーですが、 値 9,999 と 999,999 はトリガーではありません。 もちろん、大きい方の値 999,999 は常にサイズ・エラーになります。