ウィンドウ表示日付フィールドに、関連したレベル 88 条件名がある場合、 VALUE 節のリテラルは、想定された世紀ウィンドウ 1900-1999 では なく、コンパイル単位の世紀ウィンドウでウィンドウ操作が行われます。
例えば、次のようなデータ定義があるとします。
05 Date-Due Pic 9(6) Date Format yyxxxx.
88 Date-Target Value 081220.
世紀ウィンドウが 1950-2049 で、Date-Due の内容が 081220 (2008 年 12 月 20 日) であれば、以下の最初の条件は真に評価され、2 番目の条件は偽に評価されます。
If Date-Target. . . If Date-Due = 081220
リテラル 081220 は非日付として扱われるため、1900-1999 の仮定による世紀ウィンドウに対してウィンドウ操作され、1908 年 12 月 20 日を表すことになります。 しかし、レベル 88 の条件名の VALUE 節にリテラルが指定された場合には、そのリテラルは、それが付加されるデータ項目の一部になります。このデータ項目はウィンドウ表示日付フィールドなので、それが参照されるときには、必ず世紀ウィンドウが適用されます。
比較式の中で DATEVAL 組み込み関数を使用してリテラルを日付フィールドに変換することも可能です。結果の日付フィールドは、 ウィンドウ表示日付フィールドまたは拡張日付フィールドとして扱われるので、比較に矛盾は生じません。 例えば、上記の定義を使用すれば、以下の条件はどちらも真に評価されます。
If Date-Due = Function DATEVAL (081220 "YYXXXX") If Date-Due = Function DATEVAL (20081220 "YYYYXXXX")
レベル 88 条件名では、VALUE 節に THRU オプションを指定できますが、スライディング・ウィンドウではなく固定世紀ウィンドウを YEARWINDOW コンパイラー・オプションで指定する必要があります。 以下に例を示します。
05 Year-Field Pic 99 Date Format yy.
88 In-Range Value 98 Thru 06.
この形式の場合、範囲内の 2 番目の項目のウィンドウ操作値は、1 つ目の項目のウィンドウ操作値より大きくなければなりません。ただし、コンパイラーがこの差を検査できるのは、YEARWINDOW コンパイラー・オプションで固定世紀ウィンドウが指定されている場合のみです (例えば、YEARWINDOW(-68) ではなく YEARWINDOW(1940) が指定されている場合)。
ウィンドウ操作の順序に関する要件は、年末尾型日付フィールドには適用されません。年末尾型日付フィールドに対して THROUGH 句を含む条件名 VALUE 節を指定する場合、2 つのリテラルは通常の COBOL 規則に従っていなければなりません。つまり、最初のリテラルは 2 番目のリテラルより小さくなければなりません。
関連概念
仮定による世紀ウィンドウ
非日付の処理
関連タスク
日付処理の明示的制御