日付命令
日付命令を次の表に示します。
| 命令 | 従来型の構文 | 自由形式構文 |
|---|---|---|
| 日付の加算 | ADDDUR (期間の加算) | + 演算子 |
| 日付/時刻の抽出 | EXTRCT (日付/時刻/タイム・スタンプの抽出) | %SUBDT (日付、時刻、またはタイム・スタンプの一部の取り出し) |
| 日付/時刻の期間の減算 | SUBDUR (期間減算) | - 演算子または %DIFF (2 つの日付、時刻、またはタイム・スタンプ値の差) |
| 日付/時刻/タイム・スタンプから文字への変換 | MOVE (転送) または MOVEL (左につめて転送) | %CHAR (文字データへの変換) |
| 日付/時刻/タイム・スタンプから数値への変換 | MOVE (転送) または MOVEL (左につめて転送) | %DEC (パック 10 進数への変換) |
| 文字/数値から日付への変換 | MOVE (転送) または MOVEL (左につめて転送) | %DATE (日付への変換) |
| 文字/数値から時刻への変換 | MOVE (転送) または MOVEL (左につめて転送) | %TIME (時刻への変換) |
| 文字/数値/日付からタイム・スタンプへの変換 | MOVE (転送) または MOVEL (左につめて転送) | %TIMESTAMP (タイム・スタンプへの変換) |
| 日付/時刻のタイム・スタンプへの移動 | MOVE (転送) または MOVEL (左につめて転送) | 日付 + 時刻 |
| 日付/時刻/タイム・スタンプのテスト | TEST (日付/時刻/タイム・スタンプのテスト) | |
| 年数 | %YEARS (年数) | |
| 月数 | %MONTHS (月数) | |
| 日数 | %DAYS (日数) | |
| 時間数 | %HOURS (時間数) | |
| 分数 | %MINUTES (分数) | |
| 秒数 | %SECONDS (秒数) | |
| マイクロ秒数 | %MSECONDS (マイクロ秒数) | |
日付命令により、日付フィールド、時刻フィールド、およびタイム・スタンプ・フィールド、さらには日付、時刻、タイム・スタンプを表す文字フィールドあるいは数字フィールドを処理することができます。
以下を行うことができます。
- 年、月、日、時間、分、秒、あるいはマイクロ秒の単位での期間の加算または減算
- 2 つの日付、時刻、またはタイム・スタンプの間の期間の判別
- 日付、時刻、またはタイム・スタンプの値からの抽出 (例えば、日)
- 日付、時刻、またはタイム・スタンプの値が有効かどうかのテスト
期間を加算または減算するには、自由形式構文では + 演算子または - 演算子を使用でき、従来型の構文では ADDDUR 命令コードまたは SUBDUR 命令コードを使用できます。 下記の表では、自由形式構文で使用する組み込み関数と、従来型の構文で使用する期間コードを示します。
| 単位 | 組み込み関数 | 期間コード |
|---|---|---|
| 年 | %YEARS | *YEARS または *Y |
| 月 | %MONTHS | *MONTHS または *M |
| 日 | %DAYS | *DAYS または *D |
| 時間 | %HOURS | *HOURS または *H |
| 分 | %MINUTES | *MINUTES または *MN |
| 秒 | %SECONDS | *SECONDS または *S |
| マイクロ秒 | %MSECONDS | *MSECONDS または *MS |
例えば、次のどちらの方法でも、既存の日付に 23
日を加算することができます。
C ADDDUR 23:*D DUEDATE
/FREE
newdate = duedate + %DAYS(23)
/END-FREE
2 つの日付、時刻、またはタイム・スタンプの間の期間を計算するには、自由形式構文では %DIFF 組み込み関数を使用でき、従来型の構文では SUBDUR 命令コードを使用できます。どちらの場合にも、表 2 に示す期間コードのいずれかを指定する必要があります。
期間は完全な単位として渡され、剰余は廃棄されます。 59 分という期間は、時間単位で表せば 0 になります。61 分という期間は、時間単位で表せば 1 になります。
次の表では、SUBDUR 命令コードを使用した追加の例を示します。%DIFF 組み込み関数でも同じ結果を得られます。
| 期間の単位 | 演算項目 1 | 演算項目 2 | 結果 |
|---|---|---|---|
| 月 | 1999-03-28 | 1999-02-28 | 1 か月 |
| 1999-03-14 | 1998-03-15 | 11 か月 | |
| 1999-03-15 | 1998-03-15 | 12 か月 | |
| 年 | 1999-03-14 | 1998-03-15 | 0 年 |
| 1999-03-15 | 1998-03-15 | 1 年 | |
| 1999-03-14-12.34.45.123456 | 1998-03-14-12.34.45.123457 | 0 年 | |
| 時間 | 1990-03-14-23.00.00.000000 | 1990-03-14-22.00.00.000001 | 0 時間 |