対象者:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
アナリティクスプラットフォームシステム(PDW)
Microsoft FabricにおけるSQLデータベース
この関数は、startdate と enddate で指定された 2 つの日付間の差を、指定された datepart 境界の数で (符号付き整数値として) で返します。
開始日 と enddate の値の大きな違いを処理する関数については、DATEDIFF_BIGを参照してください。 Transact-SQL のすべての日付と時刻のデータ型と関数の概要については日付と時刻のデータ型と関数に関するページを参照してください。
構文
DATEDIFF ( datepart , startdate , enddate )
引数
datepart
DATEDIFFが開始日と終了日の差を報告する単位を指定します。 一般的に使用される datepart の単位には、month または second が含まれます。
datepart値は変数に指定することも、'month'のような引用符で囲まれた文字列として指定することもできません。
次の表に、すべての有効な datepart 値の一覧を示します。
DATEDIFF は、 datepart の完全名、または完全名の省略形を受け取ります。
| datepart 名 | datepart 省略形 |
|---|---|
year |
yy、yyyy |
quarter |
qq、q |
month |
mm、m |
dayofyear |
dy、y |
day |
dd、d |
week |
wk、ww |
weekday |
dw、w |
hour |
hh |
minute |
mi、n |
second |
ss、s |
millisecond |
ms |
microsecond |
mcs |
nanosecond |
ns |
特定の datepart 名前とその datepart 名の省略形は、同じ値を返します。
startdate
次のいずれかの値に解決できる式。
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
4 桁の西暦を使用して、あいまいさを排除します。 2 桁の年の値については、「 Server の構成: 2 桁の年のカットオフ 」を参照してください。
enddate
「startdate」をご覧ください。
戻り値の型
int
戻り値
datepart により設定された境界に表示された、startdate と enddate の間の 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の場合、startdate と enddate の最大差は、24 日、20 時間、31 分、23.647 秒です。
secondの場合、最大差は 68 年、19 日、3 時間、14 分、7 秒です。
startdateとenddateの両方に時間値のみが割り当てられ、datepartが時刻datepartでない場合、DATEDIFFは0を返します。
DATEDIFF では、戻り値を計算するために、startdate または enddate のタイム ゾーン オフセット要素が使用されます。
smalldatetime は分に対してのみ正確であるため、秒とミリ秒は、0 または enddate に smalldatetime 値がある場合に、戻り値にに常に設定されます。
日付データ型の変数に時刻値のみが割り当てられている場合、DATEDIFF では、欠落している日付要素の値が既定値である 1900-01-01 に設定されます。 時刻データ型または日付データ型の変数に日付値のみが割り当てられている場合、DATEDIFF では、欠落している時刻要素の値が既定値である 00:00:00 に設定されます。
startdate または enddate のいずれか一方が時刻要素のみで、もう一方が日付要素のみであった場合、DATEDIFF では、欠落している時刻要素と日付要素がそれぞれの既定値に設定されます。
startdateとenddateの日付データ型が異なる場合、一方の時刻部分または秒の小数部の有効桁数が他方よりも大きい場合、DATEDIFF他方の不足している部分が0に設定されます。
datepart の境界
次の各ステートメントには、すべて同じ startdate と enddate の値が指定されています。 これらの日付は隣接しており、時間的な差は 100 ナノ秒 (0.0000001 秒) です。 各ステートメントにおける startdate と enddate の差は、どの要素をとっても、datepart の 1 単位分となるように配慮されています。 各ステートメントは 1を返します。
SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999', '2006-01-01