ウィンドウ化日付フィールドに、関連付けられたレベル 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 組み込み関数を使用してリテラルを日付フィールドに変換することも可能です。その結果生じる日付フィールドは、ウィンドウ化日付フィールドまたは拡張日付フィールドとして扱われるので、 比較に矛盾は生じません。 例えば、上記の定義を使用すれば、以下の 2 つの条件はどちらも真に評価されます。
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 番目のリテラルより小さくなければなりません。
関連概念
仮定による世紀ウィンドウ
非日付の処理
関連タスク
日付処理の明示的制御