DATEDIFF
DATEDIFF 関数は、指定された 2 つの日付、時刻、またはタイム スタンプ間の日付部分 (日、週など) の数を計算します。
注:TDV は、サポートされているデータ ソースが使用する 2 つのパラメーター形式をサポートしています。startdate と enddate の順序が 2 つの形式で入れ替わっていることに注意してください。
構文
DATEDIFF (datepart, startdate, enddate)
DATEDIFF (enddate, startdate)
備考
| • | 最初の引数は、差を示す整数を返す日付部分を指定します。たとえば、1 (日)、4 (年) などです。 |
| • | TDV は次の datepart キーワードをサポートしています。 |
YEARS |
YEAR |
YYYY |
YY |
QUARTERS |
QUARTER |
Q |
|
MONTHS |
MONTH |
MM |
M |
WEEKS |
WEEK |
WW |
週 |
WEEKS_US [TDV でのみ使用する人為的な日付部分。以下の例 1 を参照]
|
|||
DAYS |
DAY |
DD |
D |
HOURS |
HOUR |
HH |
|
MINUTES |
MINUTE |
MI |
M |
SECONDS |
SECOND |
SS |
S |
MILLISECONDS |
MILLISECOND |
MS |
|
| • | 他の 2 つの引数 (startdate と enddate) は時系カラムの値です。 |
| • | デフォルトでは、TDV は ISO 標準に従って DATEDIFF を計算します (月曜日を週の最初の曜日として使用します)。ロケール対応のデータベース (Sybase など) は、実装するように構成されているローカル標準 (たとえば、米国標準 (日曜日を週の最初の日として使用) ) に従って計算します。この実装の違いにより、データ ソースで計算された週数が TDV で計算された週数と異なる場合があります。 |
| • | WEEKS_US は、TDV が ISO 標準ではなく米国標準に従って DATEDIFF を計算する人工的な日付部分です。WEEKS_US は、そこで拒否されるため、データ ソースにプッシュしないでください。 |
| • | Sybase は、年、月、日の日付部分に対しては正しい (標準) 結果を生成し、時、分、秒の日付部分に対しては正しくない結果を生成します。TDV は 6 つすべてに対して正しい結果を生成します。 |
例 1
金曜日と次の日曜日の週の差を計算します。
DATEDIFF ('WEEK', DATE '2014-04-25', DATE '2014-04-27')
米国の基準によると、週は日曜日から始まります。したがって、2 つの日付は異なる週に属しているため (日曜日は新しい週が始まります)、ロケール対応データベースは 1 を生成します。
ISO 規格によると、週は月曜日から始まります。したがって、金曜日と日曜日は同じ週 (前の月曜日から開始) に属しているため、TDV は結果 0 を生成します。
人工日付部分 WEEKS_US を使用すると、TDV は結果 1 を生成します。
DATEDIFF (‘WEEKS_US’, DATE ‘2014-04-25’, DATE ‘2014-04-27’)
例 2
2009 年 8 月 15 日と 2012 年 12 月 31 日の年の差を計算します。
DATEDIFF (year, date '2009-08-15', date '2012-12-31')
TDV は、次のように年間隔をカウントして 3 を返します。
[1] 2010 年 1 月 1 日+ [2] 2011 年 1 月 1 日+ [3] 2012 年 1 月 1 日= 3
指定された日付部分は YEAR であり、各年の開始のみがカウントされるため、2012 年 1 月 1 日から 2012 年 12 月 31 日までの月は無視されます。