日付および時刻式
日付/時刻式 は、コンテキストに従って、DATE 型、INT 型、INTERVAL 型、TIME 型、または TIMESTAMP 型の値に解決されます。
日付/時刻式には、以下のコンポーネントのうち、1 つ以上を組み込む必要があります。
- DATE 型、INTERVAL 型、TIME 型、または TIMESTAMP 型に基づいた変数。
- EGL が date/time 変数に割り当て可能な文字列リテラルまたは定数については、 『テキスト型の date/time 型への変換』を参照してください。
- 日付/時刻値を戻す関数呼び出し。この中には dateTimeLib 内の多くの関数が含まれます (『EGL ライブラリー dateTimeLib』を参照)。
次の表は、日付/時刻式で有効な算術演算の型を要約したものです。 演算式では TIME 変数を使用できないことに注意してください。 使用されるフォーマット記号の説明については、『日付、時刻、およびタイム・スタンプのフォーマット指定子』を参照してください。
| オペランド 1 の型 | 演算子 | オペランド 2 の型 | 結果の型 | コメント |
|---|---|---|---|---|
| DATE | - | DATE | INT | INT は日数です。 |
| DATE | +/- | NUMBER | DATE | NUMBER は、変数、リテラル、または数式のいずれであってもかまいません。これは日数として想定されます。 |
| NUMBER | + | DATE | DATE | NUMBER は、変数、リテラル、または数式のいずれであってもかまいません。これは日数として想定されます。 |
| TIMESTAMP | - | TIMESTAMP | INTERVAL | 後出の『INTERVAL 変数の使用方法』を参照してください。 |
| DATE | - | TIMESTAMP | INTERVAL | 後出の『INTERVAL 変数の使用方法』を参照してください。 |
| TIMESTAMP | - | DATE | INTERVAL | 後出の『INTERVAL 変数の使用方法』を参照してください。 |
| TIMESTAMP | +/- | INTERVAL | TIMESTAMP | |
| INTERVAL | + | TIMESTAMP | TIMESTAMP | |
| DATE | +/- | INTERVAL | TIMESTAMP | |
| INTERVAL | + | DATE | TIMESTAMP | |
| INTERVAL | +/- | INTERVAL | INTERVAL | INTERVAL は同じ種類のスパン (月スパン間隔または秒スパン間隔のいずれか) でなければなりません。 |
| INTERVAL | *// | NUMBER | INTERVAL | 例えば、3 年 3 カ月の INTERVAL を 2 で除算すると、その結果は、1 年 7 カ月に切り捨てられます。 |
INTERVAL 変数の使用方法
ここで、INTERVAL 型の概念はわかりにくいものです。 INTERVAL は、式に TIMESTAMP または INTERVAL がオペランドの 1 つとして含まれる場合にのみ機能します。 INTERVAL 型には、実質的に異なる 2 つのバージョンがあります。 1 つは 月スパン の間隔 (1 カ月より長い間隔) を、もう 1 つは 秒スパン の間隔 (1 カ月より短い間隔) を、それぞれ保存します。 INTERVAL 変数を宣言する際には書式パターンを提供する必要があり、その書式が EGL に INTERVAL が「月スパン」または「秒スパン」のいずれであるかを通知します。
月スパンの INTERVAL の正式な書式例を以下に示します。
diff01 INTERVAL("yyyy");
diff02 INTERVAL("MM");
diff03 INTERVAL("yyyyMM");
秒スパンの INTERVAL の正式な書式例を以下に示します。
diff04 INTERVAL ("ddhhmmssffff");
diff05 INTERVAL ("hhmmss");
diff06 INTERVAL ("ddhhmm");
diff07 INTERVAL ("ss");
2 つの書式を組み合わせることはできないため、次の書式は正しくありません。
diff08 INTERVAL ("yyyyMMdd"); // 無許可
diff09 INTERVAL ("MMddhhmmss"); // 無許可
INTERVAL の 2 つの実用例を以下に示します。
// 月スパンの間隔
diff01 INTERVAL ("yyyyMM");
t1 TIMESTAMP ("yyyyMM") = "200504";
t2 TIMESTAMP ("yyyyMM") = "200604";
diff01 = t2 - t1;
// diff01 は "+000100" (1 年) です
// 秒スパンの間隔
diff02 INTERVAL ("ddhhmmss");
t3 TIMESTAMP ("yyyyMMddhhmm") = "200604201027";
t4 TIMESTAMP ("yyyyMMddhhmm") = "200604201555";
diff02 = t4 - t3;
// diff02 は "+00052800" (5 時間 28 分) です
互換性に関する考慮事項
| プラットフォーム | 問題 |
|---|---|
| JavaScript 生成 | サポートされるデータ型は、ANY、BIGINT、BIN (ただし、小数点以下の桁を含まない場合に限る)、Boolean、DataItem、DATE、DECIMAL、Delegate、Dictionary、FLOAT、INT、NUM、NUMBER、SMALLFLOAT、SMALLINT、STRING (ただし、サイズ制限を含まない場合に限る)、TIME、TIMESTAMP、NUM、MONEY、サービス・パーツ、インターフェース・パーツ、外部型 (ステレオタイプ JavaScript)、サポートされるデータ型による配列、
および非構造化の基本、例外、および SQL レコード・パーツです。 サポートされないデータ型は、ArrayDictionary、BIN (小数点以下の桁数を含むもの)、BLOB、CHAR、CLOB、DBCHAR、HEX、INTERVAL、MBCHAR、NUMC、STRING (サイズ制限を含むもの)、PACF、UNICODE、および構造化されたレコード・パーツです。 |