ホームページ  >  記事  >  データベース  >  SQLでdatediff関数を使用するにはどうすればよいですか? (詳しいコード説明)

SQLでdatediff関数を使用するにはどうすればよいですか? (詳しいコード説明)

藏色散人
藏色散人オリジナル
2019-03-26 13:46:0533968ブラウズ

SQL Server では、T-SQL DATEDIFF() 関数を使用して、2 つの日付の差を返すことができます。これは、時刻、日付、smalldatetime、datetime、datetime2、または datetimeoffset 値に解析できる任意の式で機能します。したがって、2 つの時間の差も取得できます。

SQLでdatediff関数を使用するにはどうすればよいですか? (詳しいコード説明)

この記事では、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。