DATE 属性により、DATE 属性によって宣言された 2 つの変数を比較するときに、暗黙的な共通化 が行われます。1 つの変数のみが DATE 属性を持つ比較 にはフラグが付けられます。その他の被比較数は、通常、同じ DATE 属性を持つかのように処理されます。ただし、後から説明するいくつかの例外があります。
暗黙的な共通化とは、コンパイラーが、日付を共通な比較可能表記に変換するコードを 生成することを意味します。この処理では、WINDOW コンパイル時オプションで指定した ウィンドウ を使用して、2 桁年が変換されます。
次のコード断片において、DATE 属性が受け付けられると、2 番目の display ステートメントの比較は「ウィンドウ化」されます。つまり、ウィンドウが 1900 から始まると、比較は false を戻します。しかし、ウィンドウが 1950 から始まると、比較は true を戻します。
dcl a pic'(6)9' date;
dcl b pic'(6)9' def(a);
dcl c pic'(6)9' date;
dcl d pic'(6)9' def(c);
b = '670101';
d = '010101';
display( b || ' < ' || d || ' ?' );
display( a < c );
日付の比較は、以下の場所でも行うことができます。
コンパイラーは、以下の条件のもとでは、同一パターンを持った日付を比較する特別なコード を生成しません。
異種パターンを持った日付を伴う比較では、コンパイラーは、日付を共通の比較可能表記に変換するコードを生成します。変換が行われた後に、コンパイラーは 2 つの値を比較します。
1 つの被比較数が DATE 属性を持ち、その他がリテラルを持つ比較を行う場合、コンパイラーは W レベルのメッセージを発行します。以後のコンパイラー・アクションは、以下のように、リテラルの値によって異なります。
dcl start_date char(6) date; if start_date >= '' then /* no windowing */ ... if start_date >= '851003' then /* windowed */ ...