次の方法で共有


DATEDIFF(Transact-SQL年)

対象者:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticsアナリティクスプラットフォームシステム(PDW)Microsoft FabricにおけるSQLデータベース

この関数は、startdateenddate で指定された 2 つの日付間の差を、指定された datepart 境界の数で (符号付き整数値として) で返します。

開始日enddate の値の大きな違いを処理する関数については、DATEDIFF_BIGを参照してください。 Transact-SQL のすべての日付と時刻のデータ型と関数の概要については日付と時刻のデータ型と関数に関するページを参照してください。

Transact-SQL 構文表記規則

構文

DATEDIFF ( datepart , startdate , enddate )

引数

datepart

DATEDIFF開始日終了日の差を報告する単位を指定します。 一般的に使用される datepart の単位には、month または second が含まれます。

datepart値は変数に指定することも、'month'のような引用符で囲まれた文字列として指定することもできません。

次の表に、すべての有効な datepart 値の一覧を示します。 DATEDIFF は、 datepart の完全名、または完全名の省略形を受け取ります。

datepart datepart 省略形
year yyyyyy
quarter qqq
month mmm
dayofyear dyy
day ddd
week wkww
weekday dww
hour hh
minute min
second sss
millisecond ms
microsecond mcs
nanosecond ns

特定の datepart 名前とその datepart 名の省略形は、同じ値を返します。

startdate

次のいずれかの値に解決できる式。

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

4 桁の西暦を使用して、あいまいさを排除します。 2 桁の年の値については、「 Server の構成: 2 桁の年のカットオフ 」を参照してください。

enddate

startdate」をご覧ください。

戻り値の型

int

戻り値

datepart により設定された境界に表示された、startdateenddate の間の int 差。

たとえば、 SELECT DATEDIFF(day, '2036-03-01', '2036-02-28');-2を返し、2036 年を閏年にする必要があることを示します。 この場合、開始日開始してから2036-03-01日を数える場合、-2に達します。

int の範囲 (-2,147,483,648 から +2,147,483,647) を超える戻り値の場合、DATEDIFF はエラーを返します。 millisecondの場合、startdateenddate の最大差は、24 日、20 時間、31 分、23.647 秒です。 secondの場合、最大差は 68 年、19 日、3 時間、14 分、7 秒です。

startdateenddateの両方に時間値のみが割り当てられ、datepartが時刻datepartでない場合、DATEDIFF0を返します。

DATEDIFF では、戻り値を計算するために、startdate または enddate のタイム ゾーン オフセット要素が使用されます。

smalldatetime は分に対してのみ正確であるため、秒とミリ秒は、0 または enddatesmalldatetime 値がある場合に、戻り値にに常に設定されます。

日付データ型の変数に時刻値のみが割り当てられている場合、DATEDIFF では、欠落している日付要素の値が既定値である 1900-01-01 に設定されます。 時刻データ型または日付データ型の変数に日付値のみが割り当てられている場合、DATEDIFF では、欠落している時刻要素の値が既定値である 00:00:00 に設定されます。 startdate または enddate のいずれか一方が時刻要素のみで、もう一方が日付要素のみであった場合、DATEDIFF では、欠落している時刻要素と日付要素がそれぞれの既定値に設定されます。

startdateenddateの日付データ型が異なる場合、一方の時刻部分または秒の小数部の有効桁数が他方よりも大きい場合、DATEDIFF他方の不足している部分が0に設定されます。

datepart の境界

次の各ステートメントには、すべて同じ startdateenddate の値が指定されています。 これらの日付は隣接しており、時間的な差は 100 ナノ秒 (0.0000001 秒) です。 各ステートメントにおける startdateenddate の差は、どの要素をとっても、datepart の 1 単位分となるように配慮されています。 各ステートメントは 1を返します。

SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999', '2006-01-01