SUBDUR 命令は、演算項目 1 に指定されたフィールドまたは定数から演算項目 2 に指定された期間を引いて、その結果を結果フィールドに指定されたフィ ールドの結果の日付、時刻、またはタイム・スタンプに入れるために使用すること ができます。
演算項目 1 は任意指定で、日付、時刻、またはタイム・スタンプ・フィールド、 配列、配列要素、リテラル、または定数を入れることができます。 演算項目 1 にフィールド名、配列、または配列要素が入っている場合には、 そのデータ・タイプは結果フィールドに指定されたフィールドと同じタイプ でなければなりません。 演算項目 1 が指定されていない場合には、結果フィールドに指定されたフィー ルドから期間が引かれます。
演算項目 2 は必須で、2 つの副演算項目が入ります。 最初の副演算項目は、 小数点以下の桁数がゼロの数値フィールド、配列、または定数です。 フィールドが負の場合には、期間がフィールドに加えられます。 2 番目の副演算項目は、期間のタイプを示す有効な期間コードでなければなりません。 期間コードは、結果フィールドのデータ・タイプと同じでなければなりません。 例えば、年、月、または日の期間を引くことはできますが、分の期間を日付 フィールドから引くことはできません。 期間コードとその短縮形のリストについて は、日付命令を参照してください。
結果フィールドは、日付、時刻、またはタイム・スタンプ・データ・タイプ・フ ィールド、配列、または配列要素でなければなりません。 演算項目 1 がブランクの場合には、結果フィールドの値から期間が引かれれま す。 結果フィールドが配列の場合には、演算項目 2 の値が配列のそれぞれの要素か ら引かれます。 結果フィールドが時刻フィールドの場合には、結果は常に有効な時刻となりま す。 例えば、00:58:59 から 59 分を引くと、-00:00:01 になります。 この時刻は有効でないので、コンパイラーはこれを 23:59:59 に 調整します。
月の期間を日付から引く場合には、一般的な規則では月の部分が期間の月数 だけ引かれて、日の部分は変わりません。 この例外は、結果の日の部分が結果の月の実際の日数を超える場合です。 この場合には、結果の日の部分が実際の月の最終日付に合わせて調整されます。次の例 (*YMD 形式と想定している) はこの点について示しています。
結果の月の部分が 1 だけ小さくなって、日の部分は変わりません。
結果の月の部分は 1 だけ小さくなって (4 月は 30 日しかないので) 結果 の日の部分が調整されています。
年の期間を減算する場合にも同様の結果になります。 例えば、'92/02/29' から 1 年を引くと (結果の年は閏年でないので) '91/02/28' になります。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.