SQL Server では、T-SQL DATEDIFF() 関数を使用して、2 つの日付の差を返すことができます。これは、時刻、日付、smalldatetime、datetime、datetime2、または datetimeoffset 値に解析できる任意の式で機能します。したがって、2 つの時間の差も取得できます。
この記事では、SQL Server での DATEDIFF() 関数 の使用例を示します。
DATEDIFF() 関数の構文は次のとおりです。
DATEDIFF ( datepart , startdate , enddate )
ここで、datepart は比較する日付の部分です。 startdate は最初の日付、enddate は終了日です。
その仕組みは、終了日から開始日を引くことです。
例 1
2 つの日付の間の日数を計算できる基本的な例を次に示します:
SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;
結果:
+----------+ | Result | |----------| | 365 | +----------+
例 2
これは、2 つの変数を宣言し、それらに 2 つの異なる日付を割り当てた別の例です (DATEADD() を使用して、最初の日付に 1 年を追加しました)。 。次に、DATEDIFF() を使用して、その日付の個々の日付部分を返します。
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 1, @date1); SELECT DATEDIFF( year, @date1, @date2 ) AS Years, DATEDIFF( quarter, @date1, @date2 ) AS Quarters, DATEDIFF( month, @date1, @date2 ) AS Months, DATEDIFF( week, @date1, @date2 ) AS Weeks, DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear, DATEDIFF( day, @date1, @date2 ) AS Days;
結果:
+---------+------------+----------+---------+-------------+--------+ | Years | Quarters | Months | Weeks | DayOfYear | Days | |---------+------------+----------+---------+-------------+--------| | 1 | 4 | 12 | 53 | 366 | 366 | +---------+------------+----------+---------+-------------+--------+
例 3
前述のとおり, 日付間の時間部分を返すこともできます。日付/時刻値の間の時、分、秒を返す例を次に示します。
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1); SELECT DATEDIFF( hour, @date1, @date2 ) AS Hours, DATEDIFF( minute, @date1, @date2 ) AS Minutes, DATEDIFF( second, @date1, @date2 ) AS Seconds;
結果:
+---------+-----------+-----------+ | Hours | Minutes | Seconds | |---------+-----------+-----------| | 1 | 60 | 3600 | +---------+-----------+-----------+
例 4
以下は、2 つの日付/時刻値間のミリ秒、マイクロ秒、およびナノ秒数を取得する例です。
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
結果:
+----------------+----------------+---------------+ | Milliseconds | Microseconds | Nanoseconds | |----------------+----------------+---------------| | 1 | 1000 | 1000000 | +----------------+----------------+---------------+
例 5 - エラー!
100 年後のナノ秒数を返すなど、極端なことを行おうとすると、エラーが発生します。これは、DATEDIFF() が int 値を返し、100 年間のナノ秒が int データ型で処理できるよりも長いためです。
これを試してみるとどうなりますか?
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 100, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
結果:
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
もちろん、100 年に何ナノ秒があるかを本当に調べなければならない場合は、その後、DATEDIFF_BIG() 関数を使用できます。この関数は符号付き bigint データ型を返すため、DATEDIFF() よりも大きな値を返すことができます。
関連する推奨事項: 「MySQL チュートリアル 」
以上がSQLでdatediff関数を使用するにはどうすればよいですか? (詳しいコード説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。