標準日付関数の使用
標準日付関数を使用するには、これらの関数の動作を変更する設定、使用可能なフォーマット、値の指定方法について理解する必要があります。
日付関数の動作は、次の方法で変更することができます。
- 営業日を定義する。これにより、営業日に対して日付関数を使用すると、営業日以外の日付は無視されます。詳細は、標準日付関数の使用を参照してください。
- ダイアログマネージャの日付関数が日付を返すときに、先頭の 0 (ゼロ) を表示するかを決定する。詳細は、標準日付関数の使用を参照してください。
各標準日付関数についての詳細は、次のトピックを参照してください。
DATEADD - 日付単位数を日付に加算または日付から減算
営業日の指定
営業日を決定することができます。営業日の設定は、DATEADD、DATEDIF、および DATEMOV 関数に影響します。営業日を平日または祝日として識別します。
営業日の指定
営業日は通常月曜日から金曜日ですが、そうではない場合もあります。たとえば、営業日が日曜日、火曜日、水曜日、金曜日、土曜日の場合は、営業日を編集してスケジュールに反映することができます。
営業日の設定
SET BUSDAYS = smtwtfs
説明
営業日を表す 7 バイトの曜日リストです。リストには、日曜日から土曜日までの各曜日の位置が含まれています。
- ある曜日を営業日として識別するには、その曜日の頭文字を所定の位置に入力します。
- 営業日ではない日として識別するには、その曜日の所定の位置にアンダースコア (_) を入力します。
文字が正しい位置に入力されない場合、または営業日ではない曜日にアンダースコア (_) 以外の値を指定した場合は、エラーメッセージが表示されます。
営業日の設定と反映
次の例では、営業日として日曜日、火曜日、水曜日、金曜日、土曜日が指定されています。
SET BUSDAYS = S_TW_FS
現在の営業日の設定の表示
? SET BUSDAYS
祝日の指定
会社の祝日として定める日付のリストを指定することができます。これらの日付は、営業日に基づいた計算を実行する関数の使用時に除外されます。たとえば、ある週の木曜日が祝日として指定されている場合、その週の水曜日の次の営業日は金曜日になります。
祝日のリストを定義するには、次の手順を実行する必要があります。
- 標準テキストエディタを使用して祝日ファイルを作成します。
- SET コマンドを HDAY パラメータ付きで発行し、祝日ファイルを選択します。
祝日ファイルの作成規則
- 日付フォーマットには YYMD フォーマットを使用します。
- 日付の順序には昇順を使用します。
- 日付は 1 行に 1 つのみ指定します。
- データが存在する年のそれぞれが祝日ファイルに含まれている必要があります。データが存在する年が祝日ファイルに含まれていない場合、祝日ファイルが無効であると見なされます。祝日ファイルの範囲外の日付値で日付関数を呼び出すと、営業日のリクエストには 0 (ゼロ) が返されます。
たとえば、2005 年の 2 つの日付の差を計算する際に、祝日ファイルの最終日が 20041231 に指定されていると、この計算は実行されません。祝日ファイルを常に有効にする方法の 1 つとして、作成する祝日ファイルのすべてに遠い将来の日付 (例、29991231) を含めます。その結果、この祝日ファイルが常に有効であると見なされます。
- 必要に応じて、祝日の説明を入力することができます。説明は、日付の後にブランクを挿入し、その後に入力します。
デフォルト設定では、祝日ファイルは プロシジャまたはリクエストで、SET HDAY=xxxx コマンドを発行してファイル名を識別する必要があります。また、
祝日ファイルを作成するには
- 手順
- テキストエディタを使用して、祝日として定義する日付リストを作成します。詳細は、標準日付関数の使用を参照してください。
- ファイルを保存します。
デフォルトの名前規則を使用する場合は、次の手順を使用します。
説明
xxxx4 バイトの文字列です。
祝日ファイルの選択
SET HDAY = xxxx
説明
祝日ファイル名の一部で、HDAY の後ろに指定します。この文字列は、4 バイトで指定する必要があります。
祝日ファイルの作成および選択
19910325 TEST HOLIDAY 19911225 CHRISTMAS
次のコマンドで、HDAYTEST が祝日ファイルに設定されます。
SET BUSDAYS = SMTWTFS SET HDAY = TEST
このリクエストは、HDAYTEST を使用して計算を実行します。
TABLE FILE MOVIES PRINT TITLE RELDATE COMPUTE NEXTDATE/YMD = DATEADD(RELDATE, 'BD', 1); WHERE RELDATE GE '19910101'; END
出力結果は次のとおりです。
TITLE RELDATE NEXTDATE ----- ------- -------- TOTAL RECALL 91/03/24 91/03/26
ダイアログマネージャの日付時間関数による先頭 0 (ゼロ) の有効化
ダイアログマネージャで整数フォーマットを返す日付時間関数を使用する場合、ダイアログマネージャは先頭の 0 (ゼロ) を切り捨てます。たとえば、関数が値 000101 (2000 年 1 月 1 日) を返す場合、ダイアログマネージャは先頭の 0 (ゼロ) を切り捨てるため、101 という誤った日付が生成されます。この問題を回避するには、LEADZERO パラメータを使用します。
LEADZERO は、関数を直接呼び出す式のみをサポートします。ネスティングやその他の数学関数を持つ式では、常に先頭の 0 (ゼロ) は切り捨てられます。以下はその例です。
-SET &OUT = AYM(&IN, 1, 'I4')/100;
上記の例では、LEADZERO パラメータの設定に関わらず、先頭の 0 (ゼロ) が切り捨てられます。
先頭文字 0 (ゼロ) の表示設定
SET LEADZERO = {ON|OFF}
説明
先頭の 0 (ゼロ) が存在する場合は表示します。
先頭の 0 (ゼロ) を切り捨てます。デフォルト値は OFF です。
先頭文字 0 (ゼロ) の表示
AYM 関数は、入力された日付 (1999 年 12 月) に 1 か月加算します。
-SET &IN = '9912'; -RUN -SET &OUT = AYM(&IN, 1, 'I4'); -TYPE &OUT
LEADZERO のデフォルト値を使用すると、次の値が生成されます。
1
これは、2000 年 1 月を不正確に表示した値です。LEADZERO パラメータをリクエストに次のように設定します。
SET LEADZERO = ON -SET &IN = '9912'; -SET &OUT = AYM(&IN, 1, 'I4'); -TYPE &OUT
その結果、次の値が生成されます。
0001
これは、2000 年 1 月を正確に表示した値です。