| 自由形式構文 | TEST{(EDTZ) } {dtz 形式 } フィールド名 |
| コード | 演算項目 1
(dtz 形式) |
演算項目 2 | 結果フィールド
(フィールド名) |
標識 | ||
|---|---|---|---|---|---|---|
| TEST (E) | 日付/時刻または タイム・スタンプ・フィールド | _ | ER | _ | ||
| TEST (D E) | 日付形式 | 文字または 数値フィールド | _ | ER | _ | |
| TEST (E T) | 時刻の形式 | 文字または 数値フィールド | _ | ER | _ | |
| TEST (E Z) | タイム・スタンプ形式 | 文字または 数値フィールド | _ | ER | _ | |
TEST 命令コードでは、日付、時刻、またはタイム・スタンプ・フィールドを 使用する前にそれらの妥当性を検査することができます。
区切り記号のない数値フィールドおよび文字フィールドは、日付、時刻、またはタイム・スタンプの値の数字部分の妥当性についてテストされます。 文字フィールドは、数字および区切り記号の両方の 妥当性についてテストされます。
フィールド名・オペランドとして指定された文字または数字フィールドが、 テスト対象の形式で必要とされるよりも長い場合は、余分なデータは無視されます。 文字データの場合、左端のデータのみが使用され、 数値データの場合、右端のデータのみが使用されます。 例えば、dtz 形式 オペランドが数値の日付のテストのための *MDY である 場合、フィールド名 オペランドの右端の 6 桁が検査されます。
テスト命令では、命令コード拡張 'E' またはエラー標識 ER を指定する必要がありますが、 両方を指定することはできません。 フィールド名 オペランドが正しくない場合、プログラム状況コード 112 が通知されます。 次に、指定されたエラー処理方法に基づいて、エラー標識がオンに設定されるか、 または %ERROR 組み込み関数が '1' を戻すように設定されます。 エラー処理の詳細については、プログラム例外/エラーを 参照してください。
数値フィールドまたは文字フィールド
に 'Z' 命令コード拡張が指定されている場合、
秒の小数部が正確に 6 桁の値であると想定されます。 
詳細については、日付命令または テスト命令を参照してください。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D
D Datefield S D DATFMT(*JIS)
D Num_Date S 6P 0 INZ(910921)
D Char_Time S 8 INZ('13:05 PM')
D Char_Date S 6 INZ('041596')
D Char_Tstmp S 20 INZ('19960723140856834000')
D Char_Date2 S 9A INZ('402/10/66')
D Char_Date3 S 8A INZ('2120/115')
D
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* Indicator 18 will not be set on, since the character field is a
* valid *ISO timestamp field, without separators.
C *ISO0 TEST (Z) Char_Tstmp 18
* Indicator 19 will not be set on, since the character field is a
* valid *MDY date, without separators.
C *MDY0 TEST (D) Char_Date 19
*
* %ERROR will return '1', since Num_Date is not *DMY.
*
C *DMY TEST (DE) Num_Date
*
* No Factor 1 since result is a D data type field
* %ERROR will return '0', since the field
* contains a valid date
C
C TEST (E) Datefield
C
* In the following test, %ERROR will return '1' since the
* Timefield does not contain a valid USA time.
C
C *USA TEST (ET) Char_Time
C
* In the following test, indicator 20 will be set on since the
* character field is a valid *CMDY, but there are separators.
C
C *CMDY0 TEST (D) char_date2 20
C
* In the following test, %ERROR will return '0' since
* the character field is a valid *LONGJUL date.
C
C *LONGJUL TEST (DE) char_date3