日付(DATE)、タイムスタンプ(TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE)、および間隔(INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND)データ型は算術演算をサポートしています。このドキュメントでは、主に日付時刻DATEと間隔INTERVALの計算ルールについて説明します。
OceanBaseデータベースは以下のルールに基づいて結果を計算します:
日付やタイムスタンプ値(間隔値ではなく)の算術演算では
NUMBER定数を使用できます。OceanBaseデータベースは内部でタイムスタンプ値を日付値に変換し、算術的な日付時刻および間隔式におけるNUMBER定数を日数と解釈します。例えば、SYSDATE+1は明日です。SYSDATE-7は1週間前です。SYSDATE+(10/1440)は10分後です。注意
日付またはタイムスタンプ値に対して乗算または除算を行うことはできません。
OceanBaseデータベースは
BINARY_FLOATとBINARY_DOUBLEの演算子をNUMBERに変換します。各
DATE値には時間成分が含まれており、多くの日付演算の結果には分数が含まれます。この分数は1日の一部を表します。例えば、1.5日は36時間です。OceanBaseの組み込み関数は、これらの分数も返し、DATEデータに対する一般的な操作を実行します。例えば、MONTHS_BETWEEN関数は2つの日付の間の月数を返します。結果の小数部分は31日の月のその部分を表します。演算子が
DATE値または数値値であり、かつ時差または小数秒の部分を含まない場合:- OceanBaseデータベースは、他の演算子をDATEデータに変換します。数値に間隔を掛ける演算は例外で、間隔が返されます。
- もう一方の演算子に時差値がある場合、OceanBaseデータベースは返される値に現在のセッションの時差を使用します。
- もう一方の演算子に小数秒の数値がある場合、その小数秒の数値は失われます。
タイムスタンプ、時間間隔、または数値を
DATEデータ型専用の組み込み関数に渡す場合、OceanBaseデータベースは非DATE値をDATE値に変換します。間隔計算が日付時刻値を返す場合、結果は実際の日付時刻値でなければなりません。そうでない場合、データベースはエラーを返します。例:
SELECT TO_DATE("31-AUG-2004','DD-MON-YYYY") + TO_YMINTERVAL("0-1") FROM DUAL; SELECT TO_DATE("29-FEB-2004','DD-MON-YYYY") + TO_YMINTERVAL("1-0") FROM DUAL;最初の文は31日の月に1ヶ月を加算すると、計算結果が9月31日となり、これは有効な日付ではないため、実行は失敗します。2番目の文は、4年に一度しか存在しない日付に1年を加算することは無効で、実行は失敗します。しかし、2月29日の4年前を加算することは有効で、計算結果は
2008年2月29日となります:SELECT TO_DATE("29-FEB-2004", "DD-MON-YYYY") + TO_YMINTERVAL("4-0") FROM DUAL;以下の表は日付時刻の算術演算のマトリックスです。「---」はサポートされていない操作を示します。
