次の例は、日付フィールドを非日付に変換する場合を示しています。
フィールド Invoice-Date は、ウィンドウ操作される年間通算日の日付フィールドです。レコードによっては、00999 の値を含んでいるものがあり、これはレコードが真の送り状レコードではなく、ファイル制御情報を含んでいることを示します。
Invoice-Date には DATE FORMAT 文節があります。プログラム内でのこのフィールドへの参照のほとんどが日付固有であるからです。しかし、制御レコードの有無が検査される場合には、年部分の値が 00 になっていると、混乱を招きかねません。Invoice-Date の値が 00 の年は、世紀ウィンドウに応じて、1900 または 2000 のいずれかを表します。これは、非日付 (例の中ではリテラル 00999) と比較されますが、それは、常に仮定による世紀ウィンドウに対してウィンドウ操作されるため、常に 1900 年を表します。
比較が矛盾した結果にならないようにするためには、UNDATE 組み込み関数を使用して Invoice-Date を非日付に変換しなければなりません。したがって、IF ステートメントがどの日付フィールドも比較しない場合には、ウィンドウ操作を適用させる必要はありません。以下に、その例を示します。
01 Invoice-Record.
03 Invoice-Date Pic x(5) Date Format yyxxx.
. . .
If FUNCTION UNDATE(Invoice-Date) Equal “00999” . . .
関連参照
UNDATE
(「COBOL for Windows 言語解説書」)