指定されたタイムスタンプに、特定タイプの間隔の数を加えることで計算された、新しいタイムスタンプを返すスカラ数値関数です。
Synopsis
{fn TIMESTAMPADD(interval-type,integer-exp,timestamp-exp)}
引数
interval-type キーワードとして指定される、integer-exp が表す時刻/日付間隔のタイプ。
integer-exp timestamp-exp に追加される整数値式。
timestamp-exp TIMESTAMP 値式。integer-exp の値によって増加します。
概要
TIMESTAMPADD 関数は、指定された日付部分を指定された単位数でインクリメントすることで、日付/時刻式を変更します。例えば、interval-type が SQL_TSI_MONTH で、integer-exp が 5 の場合は、TIMESTAMPADDtimestamp-exp に 5 か月をインクリメントします。また、integer-exp に負の整数を指定して、日付部分をディクリメントすることもできます。計算された日付は、TIMESTAMP として返されます。1000 分の 1 秒 (0.001) でカウントして、秒の小数部でインクリメントあるいはディクリメントできます。
TIMESTAMPADD は { } 括弧構文による ODBC スカラ関数としてのみ使用できる点に注意してください。
同様の日付/時刻変更の演算は、DATEADD 汎用関数を使用して、タイムスタンプで実行できます。
間隔のタイプ
interval-type パラメータは、以下のタイムスタンプ間隔のいずれかになります。
タイムスタンプ間隔をインクリメントまたはディクリメントすると、他の間隔も適切に変更されます。例えば、時間のインクリメント結果が午前 0 時を超える場合、自動的に日がインクリメントされます。同様に、順次、月などがインクリメントされます。TIMESTAMPADD は、各月の日数やうるう年を考慮に入れて、常に有効な日付を返します。例えば、1 月 31 日に 1 か月をインクリメントすると 2 月 28 日 (該当月の有効な最終日付) が返されますが、指定された年がうるう年の場合は 2 月 29 日が返されます。
DATEADDTIMESTAMPADD では四半期 (3 か月の間隔) が処理されます。DATEDIFFTIMESTAMPDIFF では四半期は処理されません。
タイムスタンプ形式
timestamp-exp パラメータ値には、同じ論理形式と外部形式があります。文字列の形式は、以下のとおりです。
yyyy-mm-dd hh:mm:ss
timestamp-exp パラメータ値には以下の特徴があります。
範囲と値のチェック
TIMESTAMPADD は、入力値に対して以下のチェックを実行します。値がチェックに失敗した場合は、NULL 文字列が返されます。
以下の例は、元のタイムスタンプに 1 週間を加算します。
SELECT DISTINCT {fn TIMESTAMPADD(SQL_TSI_WEEK,1,'2003-12-20 12:00:00')}
FROM Sample.Person
1 週の加算は 7 日の加算になるので、上記の例は 2003-12-27 12:00:00 を返します。
以下の例は、元のタイムスタンプに 5 か月を加算します。
SELECT DISTINCT {fn TIMESTAMPADD(SQL_TSI_MONTH,5,'1999-12-20 12:00:00')}
FROM Sample.Person
この例は 5 か月を加算すると年がインクリメントされるので、2000-05-20 12:00:00 を返します。
以下の例も、元のタイムスタンプに 5 か月を加算します。
SELECT DISTINCT {fn TIMESTAMPADD(SQL_TSI_MONTH,5,'1999-01-31 12:00:00')}
FROM Sample.Person
上記の例は 1999-06-30 12:00:00 を返します。この TIMESTAMPADD は、月だけでなく日の値も変更します。これは単純に月をインクリメントすると、無効な日付の 6 月 31 日となるためです。
以下の例は、元のタイムスタンプに 45 分をインクリメントします。
SELECT DISTINCT {fn TIMESTAMPADD(SQL_TSI_MINUTE,45,'1999-12-20 00:00:00')}
FROM Sample.Person
上記の例は 1999-12-20 00:45:00 を返します。
以下の例は、元のタイムスタンプに 45 分をディクリメントします。
SELECT DISTINCT {fn TIMESTAMPADD(SQL_TSI_MINUTE,-45,'1999-12-20 00:00:00')}
FROM Sample.Person
上記の例は 1999-12-19 23:15:00 を返します。この場合、時刻をディクリメントすると、日もディクリメントされる点に注意してください。
関連項目
TIMESTAMPDIFF DATEADD DATENAME DATEPART