日付部分 (時刻や日など) の数値を、指定されたタイムスタンプに加算することによって計算された日付を返す、汎用日付/時刻関数です。
Synopsis
DATEADD(datepart,integer-exp,date-exp)
計算された日付は、TIMESTAMP として返されます。
DATEADD は、常に以下の形式の完全な日付/時刻式を返します。
以下のメソッド・コールを使用することで、Caché ObjectScript からこの関数を呼び出すこともできます。
datepart パラメータは、以下の日付/時刻コンポーネントの 1 つで、正式な名前 (日付部分列) または省略形 (省略形列) のいずれかになります。これらの
datepart コンポーネント名と省略形では、大文字と小文字は区別されません。
リテラルとして無効な
datepart 値を指定した場合は、SQLCODE -8 エラー・コードが発行されます。一方、ホスト変数として無効な
datepart 値を指定した場合は、SQLCODE エラーは発行されず、
DATEPART 関数は NULL 値を返します。
日付部分をインクリメントまたはデクリメントすると、他の日付部分も適切に変更されます。例えば、時間のインクリメント結果が午前 0 時を超える場合、自動的に日がインクリメントされます。同様に、順次、月などがインクリメントされます。
DATEADD は、各月の日数やうるう年を考慮に入れて、常に有効な日付を返します。例えば、1 月 31 日に 1 か月をインクリメントすると 2 月 28 日 (該当月の有効な最終日付) が返されますが、指定された年がうるう年の場合は 2 月 29 日が返されます。
date-exp パラメータは、以下のいずれかの形式で指定できます。小数秒は指定、省略のどちらでもかまいません。
-
-
Caché %TimeStamp 論理値 (YYYY-MM-DD HH:MM:SS)
-
Caché %String (または互換性) 値は、以下のいずれかの形式になります。
mmdelimiterdddelimiter[yy]yy
dd Mmm[mm][,][yy]yy
dd [yy]yy Mmm[mm]
yyyy Mmm[mm] dd
yyyy [dd] Mmm[mm]
delimiter は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) です。
HH:MM[:SS:SSS][{AM|PM}]
HH:MM[:SS.S]
HH['']{AM|PM}
年が 2 桁で表示される場合、%DATE ユーティリティの移動日付ウィンドウが使用され (使用できる場合)、何世紀か判断されます。
DATEADD では、Sybase および Microsoft SQL Server との互換性が提供されています。
DATEADD は、入力値に対して以下のチェックを実行します。値がチェックに失敗した場合は、NULL 文字列が返されます。
-
日付文字列は完全であると同時に、要素数、各要素の桁数、および区切り文字に適切な形式が使用されている必要があります。年は 4 桁で指定される必要があります。
-
日付値は、有効な範囲内にある必要があります。年は 1841 から 9999、月は 1 から 12、日は 1 から 31、時間は 0 から 23、分は 0 から 59、秒は 0 から 59 がそれぞれ有効範囲です。
-
インクリメント結果として返される年は、1841 から 9999 までの範囲内にある必要があります。この範囲を超えると、<null> が返されます。
-
月の日数は、該当月と該当年にあったものでなければなりません。例えば、日付 '0229' が有効なのは、指定された年がうるう年の場合のみです。
-
10 よりも小さい日付値の先頭のゼロは、記載、省略のどちらでもかまいません。その他の非標準的な整数値は許可されません。例えば、'07' または '7' は有効な日値ですが、'007'、'7.0'、または '7a' は無効です。
以下の例は、指定された日付に 1 週を加算します。
SELECT DISTINCT DATEADD('week',1,'1999-12-20') AS NewDate
FROM Sample.Person
1 週の加算は 7 日の加算になるので、上記の例は 1999-12-27 00:00:00 を返します。この
DATEADD では、時刻部分が省略されています。
以下の例は、元のタイムスタンプに 5 か月を加算します。
SELECT DISTINCT DATEADD('mm',5,'1999-12-20 12:00:00') AS NewDate
FROM Sample.Person
5 か月を加算すると年がインクリメントされるので、上記の例は 2000-05-20 12:00:00 を返します。
以下の例も、元のタイムスタンプに 5 か月を加算します。
SELECT DISTINCT DATEADD('mm',5,'1999-01-31 12:00:00') AS NewDate
FROM Sample.Person
上記の例は 1999-06-30 12:00:00 を返します。この
DATEADD は、月だけでなく日の値も変更します。これは単純に月をインクリメントすると、無効な日付の 6 月 31 日となるためです。
以下の例は、元のタイムスタンプに 45 分を加算します。
SELECT DISTINCT DATEADD('mi',45,'1999-12-20 12:00:00') AS NewTime
FROM sample.person
上記の例は 1999-12-20 12:45:00 を返します。
以下の例も、元のタイムスタンプに 45 分を加算しますが、この場合は日付もインクリメントされます。
SELECT DISTINCT DATEADD('mi',45,'1999-12-20 23:30:00') AS NewTime
FROM sample.person
上記の例は 1999-12-21 00:15:00 を返します。
以下の例は、元のタイムスタンプに 45 分をデクリメントします。
SELECT DISTINCT DATEADD('mi',-45,'1999-12-20 12:00:00') AS NewTime
FROM Sample.Person
上記の例は 1999-12-20 11:15:00 を返します。
以下の例は、現在の日付に 60 日を加算し、結果を各月の長さに合わせて調整します。
SELECT DISTINCT DATEADD('dd',60,CURRENT_DATE) AS NewDate
FROM Sample.Person
以下の最初の例は指定された日付に 92 日を加算し、2 番目の例は指定された日付に 1 四半期を加算します。
SELECT DISTINCT DATEADD('dd',92,'1999-12-20') AS NewDate
FROM sample.person
SELECT DISTINCT DATEADD('qq',1,'1999-12-20') AS NewDate
FROM sample.person
最初の例は 2000-03-21 00:00:00 を返し、2 番目の例は 2000-03-20 00:00:00 を返します。1 四半期をインクリメントすると、月部分に 3 がインクリメントされ、必要に応じて年部分がインクリメントされます。また、結果月の最大日数に合わせて修正されます。
上記の例は、すべて datepart に省略形を使用しています。しかし、datepart には、以下の例のように正式な名前を指定することもできます。
SELECT DISTINCT DATEADD('day',92,'1999-12-20') AS NewDate
FROM sample.person
上記の例は 2000-03-21 00:00:00 を返します。