TIMESTAMPDIFF
TIMESTAMPDIFF関数は、2つのタイムスタンプ間の指定された時間隔の合計を戻します。
SQL構文
TIMESTAMPDIFF (Interval, TimestampExpression1, TimestampExpression2)
パラメータ
TIMESTAMPDIFFには、次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
指定された時間隔。リテラルとして表す必要があります。説明セクションに有効な値を示します。 |
|
|
日時式。有効なデータ型は、 |
|
|
日時式。有効なデータ型は、 |
説明
-
Intervalの有効な値は、次のとおりです。-
SQL_TSI_FRAC_SECOND -
SQL_TSI_SECOND -
SQL_TSI_MINUTE -
SQL_TSI_HOUR -
SQL_TSI_DAY -
SQL_TSI_WEEK -
SQL_TSI_MONTH -
SQL_TSI_QUARTER -
SQL_TSI_YEAR
-
-
SQL_TSI_FRAC_SECONDは、10億分の1秒単位で表されます。 -
Intervalは、タイムスタンプの差を戻す単位を決定します。たとえば、SQL_TSI_YEARを指定すると、タイムスタンプの差は年数で戻されます。 -
TimesTenは、
TimestampExpression2からTimestampExpression1を引いた差として結果を戻します。戻り型は、TT_BIGINTです。 -
正数のタイムスタンプ式(0001-01-01)のみ使用できます。
TT_DATEおよびTT_TIMESTAMPでは、データ型の開始範囲が1753-01-01であるため、タイムスタンプ式はこの日付と同等かそれ以上である必要があります。 -
TimestampExpression1またはTimestampExpression2がNULLの場合、結果はNULLになります。 -
いずれかのタイムスタンプ式が日付値で、
Intervalで小数秒、秒、分または時間が指定されると、TimesTenはタイムスタンプの差を計算する前に、タイムスタンプの時間部分を0 (ゼロ)に設定します。 -
この関数は、まず、より上位の時間隔型を指定された時間隔型に変換することで、指定された
Intervalの単位で各タイムスタンプを表します。たとえば、指定された時間隔が月数の場合、年数が月数に変換されます。つまり、1年は12か月、1週間は7日などです。2つのタイムスタンプ間の日数を検出するために、正確な日数が計算されます。月数は日数によって変わるため、TimesTenでは1か月の日数は想定されていません。 -
関数は、時間隔の小数部分が時間隔の境界をまたぐときに、指定された時間隔を増分します。たとえば、2009-12-31と2010-01-01の間の年の差は、年の小数部が翌年にまたがるため(2009年から2010年)、1年となります。ただし、2010-01-01と2010-12-31の差は、時間隔の小数部分が境界をまたがないため0年です。2010年内になります。
-
関数は、週の差を計算する場合は、最初に日数で差を計算してから、その結果を丸める前に7で除算します。TimesTenでは、1週間は日曜日から始まると想定されています。そのため、2010-10-21(木曜日)と2010-10-25(次の月曜日)の週の差は1週間になります。週の開始を火曜日とすると、同じ日付間の差は0週間になります。
例
TIMESTAMPDIFF関数を使用して、2008-02-01と2008-03-01の日付間の差を日数で計算します。2008年はうるう年のため、結果は29日になります。1か月を30日と想定しなくても、正確に計算されます。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_DAY, DATE '2008-02-01', DATE '2008-03-01') FROM dual; < 29 > 1 row found.
TIMESTAMPDIFF関数を使用して、2009-02-01と2009-03-01の日付間の差を月数で計算します。月の時間隔の境界をまたぐため、関数は1を戻します。2つ目の例では、時間隔に日数が指定されているため、結果は28になります。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_MONTH, DATE '2009-02-01', DATE '2009-03-01')
FROM dual;
< 1 >
1 row found.
Command> SELECT TIMESTAMPDIFF (SQL_TSI_DAY, DATE '2009-02-01', DATE '2009-03-01')
FROM dual;
< 28 >
1 row found.
TIMESTAMPDIFF関数を使用して、2009-02-01と2009-02-29の日付間の差を月数で計算します。月の時間隔の境界をまたがないため、関数は0(ゼロ)を戻します。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_MONTH, DATE '2009-02-01', DATE '2009-02-28')
FROM dual;
< 0 >
1 row found.
TIMESTAMPDIFF関数を使用して、型が混在した期間の時間差を小数秒で示します。1時間の時間差は、ナノ秒(小数秒の単位)で戻されます。データ型の時間部分は00:00:00に設定されます。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_FRAC_SECOND, TT_TIMESTAMP '2009-12-31 01:00:00.00',
DATE '2009-12-31') FROM dual;
< -3600000000000 >
1 row found.