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

藏色散人
リリース: 2019-03-26 13:46:05
オリジナル
33963 人が閲覧しました

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!