時刻の算術計算

時刻は、減算、増分、または減分を行うことができます。

時刻の減算: ある時刻 (TIME2) を別の時刻 (TIME1) から引いた結果は、この 2 つの時刻間の時間数、分数、および秒数を指定する時刻期間となります。 結果のデータ・タイプは DECIMAL(6,0) です。 TIME1TIME2 より大きいか等しい場合は、TIME1 から TIME2 を引きます。 ただし、TIME1TIME2 より小さい場合には、TIME2 から TIME1 を引いて、結果の符号を負にします。 RESULT = TIME1 - TIME2 の演算のために行われる手順を、次に解説します。

時刻の減算: result = time1 - time2
  • SECOND(TIME2) <= SECOND(TIME1)の場合は、SECOND(RESULT) = SECOND(TIME1) - SECOND(TIME2)
  • SECOND(TIME2) > SECOND(TIME1)の場合、SECOND(RESULT) = 60 + SECOND(TIME1) - SECOND(TIME2)およびMINUTE(TIME2)は 1 ずつ増分されます。
  • MINUTE(TIME2) <= MINUTE(TIME1)の場合は、MINUTE(RESULT) = MINUTE(TIME1) - MINUTE(TIME2)
  • MINUTE(TIME2) > MINUTE(TIME1)の場合、MINUTE(RESULT) = 60 + MINUTE(TIME1) - MINUTE(TIME2)およびHOUR(TIME2)は 1 ずつ増分されます。
  • HOUR(RESULT) = HOUR(TIME1) - HOUR(TIME2).

例えば、TIME('11:02:26') - '00:32:56' の結果は、「102930」(10 時間 29 分 30 秒の期間) です。 この例で、 第 2 オペランドは時刻に変換する必要がないことに注意してください。 SQLのDatetime演算で説明されている減算の規則の1つによると、第1オペランドが時間の場合、第2オペランドは時間の文字列表現とすることができます。

時刻の増減: 時刻に期間を足した結果、 あるいは時刻から期間を引いた結果は、 それ自体が時刻となります。 時間数のオーバーフローやアンダーフローは捨てられ、これにより常に結果が時刻となります。 時間数で指定する期間を加算または減算する場合、影響を受けるのは時間数の部分だけです。 「00:00:00」という時刻に 24 時間を足した結果は、「24:00:00」という時刻になります。 ただし、その他の時刻の場合は、24 時間を足すと同じ時刻になります。例えば、「00:00:59」という時刻に 24 時間を足した結果の時刻は、「00:00:59」です。 分数と秒数は変更されません。

同様に、分数で指定する期間を加算または減算する場合、影響を受けるのは分の部分だけです。 ただし、必要に応じて時間数の部分にも影響が及びます。 時刻の秒の部分は変更されません。

秒の期間を足したり引いたりすると、時刻の秒の部分が影響を 受ける他に、分および時も影響を受ける可能性があります。

時刻期間は、正でも負でも、時刻に足したり、時刻から引いたりすることができます。 結果は、指定した時間数、分数、秒数の順に増分または減分された時刻となります。 したがって、TIME1 + X (X は正の DECIMAL(6,0)) は、次の式と等価です。
  TIME1 + HOUR(X) HOURS + MINUTE(X) MINUTES + SECOND(X) SECONDS