MOVE および MOVEL 命令コードは、日付、時刻、およびタイム・スタンプ・デー タ・タイプ・フィールドの転送に使用することができます。
MOVE および MOVEL 命令コードでは次の組み合わせを使用することができます。
演算項目 1 は、転送元および転送先が両方とも、日付、時刻または タイム・スタンプ・フィールドである場合にはブランクでなければなりません。 演算項目 1 がブランクの場合、日付、時刻、またはタイム・スタンプ・フィールド の形式が使用されます。
そうでない場合には、演算項目 1 にこの命令の転送元または転送先の文字また は数値フィールドに対応する日付または時刻の形式が入ります。有効な任意の形式を指定することができます。 日付データ・タイプ、時刻データ・タイプ、および タイム・スタンプ・データ・タイプ を 参照してください。
演算項目 1 に指定する場合には、次のことに留意してください。
演算項目 2 は必須で、文字、数値、日付、時刻、またはタイム・スタンプのいずれかの 値でなければなりません。 この項目には、変換するフィールド、配列、配列要素、 テーブル名、リテラル、または名前のついた定数のいずれかを入れます。
演算項目 2 には次の規則が適用されます。
結果フィールドは日付、時刻、タイム・スタンプ、数値、または 文字の各変数でなければなりません。このフィールドは、フィールド、配列、配列要素、または テーブル名のいずれでもかまいません。日付または時刻は、その定義済みの形式 または演算項目 1 に指定された形式コードに従って、結果フィールドに入れられます。 結果フィールドが数値の場合には、命令に先立って区切り文字が除去されます。 使用される長さは、区切り文字が除去された後の長さです。
日付からタイム・スタンプ・フィールドへ転送する場合には、タイム・スタンプの時刻 とマイクロ秒部分は影響を受けませんが、タイム・スタンプ全体が検査されて、正 しくなければエラーが生成されます。
時刻からタイム・スタンプ・フィールドに転送する場合には、タイム・スタンプのマイ クロ秒部分は 000000 に設定されます。 日付部分は影響を受けませんが、タイム・スタンプ全体が検査されて、正しくなければエラーが生成されます。
文字データまたは数値データが必要な長さより長い場合には、左端のデータ (MOVE 命令 の場合は右端) が使用されます。 演算項目 1 によって転送されるデータの長さが 決まることに留意してください。 例えば、数値日付からの MOVE 命令で、 演算項目 1 の形式が *MDY の場合、演算項目 2 の右端の 6 桁のみが 使用されます。
図 157 に、日付フィールド相互間または文字フィールドと 日付フィールドの間で 2 桁と 4 桁の年の日付を定義し転送する方法について 示します。
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+.... * Define two 8-byte character fields. D CHR_8a s 8a inz('95/05/21') D CHR_8b s 8a inz('abcdefgh') * * Define two 8-byte date fields. To get a 2-digit year instead of * the default 4-digit year (for *ISO format), they are defined * with a 2-digit year date format, *YMD. For D_8a, a separator (.) * is also specified. Note that the format of the date literal * specified with the INZ keyword must be the same as the format * specified on the * control specification. In this case, none * is specified, so it is the default, *ISO. * D D_8a s d datfmt(*ymd.) D D_8b s d inz(d'1995-07-31') datfmt(*ymd) * * Define a 10-byte date field. By default, it has *ISO format. D D_10 s d inz(d'1994-06-10') * * D_10 now has the value 1995-05-21 * * Move the 8-character field to a 10-character date field D_10. * It will contain the date that CHR_8a was initialized to, but * with a 4-digit year and the format of D_10, namely, * 1995-05-21 (*ISO format). * * Note that a format must be specified with built-in function * %DATE to indicate the format of the character field. * /FREE D_10 = %DATE (CHR_8a: *YMD); // // Move the 10-character date to an 8-character field CHR_8b. // It will contain the date that was just moved to D_10, but with // a 2-digit year and the default separator indicated by the *YMD // format. // CHR_8b = %CHAR (D_10: *YMD); // // Move the 10-character date to an 8-character date D_8a. // It will contain the date that * was just moved to D_10, but // with a 2-digit year and a . separator since D_8a was defined // with the (*YMD.) format. // D_8a = D_10; // // Move the 8-character date to a 10-character date D_10 // It will contain the date that * D_8b was initialized to, // but with a 4-digit year, 1995-07-31. // D_10 = D_8b; // // After the last move, the fields will contain // CHR_8b: 95/05/21 // D_8a: 95.05.21 // D_10: 1995-07-31 // *INLR = *ON; /END-FREE
次の例は CYYMMDD 形式の文字フィールドから *ISO 形式の日付フィールド に変換する方法を示しています。 これは、タイプ *DATE のコマンド・パラメータ ーを使用している場合に特に効果的です。
CMD PROMPT('Use DATE parameter') PARM KWD(DATE) TYPE(*DATE)
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+.... * Prototype and procedure interface for this program D FIG210 PR EXTPGM('FIG210') D DateParm 7A D FIG210 PI D DateParm 7A * Declare a date type with date format *ISO. D ISO_DATE S D DATFMT(*ISO) * The format of the DateParm parameter is CYYMMDD, so code * *CYMD0 as the 2nd parameter of built-in function %DATE. /FREE ISO_DATE = %DATE (DateParm: *CYMD0); /END-FREE
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.