概要:このチュートリアルでは、SQLのDATEDIFF()
関数を使用して2つの日付の差を計算する方法を学習します。
構文
2つの日付の差を計算するには、DATEDIFF()
関数を使用します。以下は、SQL ServerにおけるDATEDIFF()
関数の構文を示しています。
DATEDIFF ( datepart , startdate , enddate )
Code language: SQL (Structured Query Language) (sql)
引数
datepart
datepart
は、関数が返す日付の一部です。次の表は、SQL Serverで有効な日付の一部を示しています。
有効な日付部分 | 略語 |
---|---|
年 | yy、 yyyy |
四半期 | qq、 q |
月 | mm、 m |
通日 | dy、 y |
日 | dd、 d |
週 | wk、 ww |
曜日 | dw、 w |
時間 | hh |
分 | mi、 n |
秒 | ss、 s |
ミリ秒 | ms |
マイクロ秒 | mcs |
ナノ秒 | ns |
startdate、 enddate
startdate
とenddate
は、差を求める日付リテラルまたは式です。
戻り値
DATEDIFF()
関数は、datepart
引数で指定された単位を持つ整数値を返します。
例
次の例は、2つの日付間の年の数を返します。
SELECT DATEDIFF(year,'2015-01-01','2018-01-01');
Code language: SQL (Structured Query Language) (sql)
結果は次のとおりです。
3
Code language: SQL (Structured Query Language) (sql)
月または日の数を取得するには、最初の引数を月または日に変更します(下記参照)。
SELECT DATEDIFF(month,'2015-01-01','2018-01-01'),
DATEDIFF(day,'2015-01-01','2018-01-01');
Code language: SQL (Structured Query Language) (sql)
結果は次のとおりです。
m d
----------- -----------
36 1096
Code language: SQL (Structured Query Language) (sql)
DATEDIFF()
関数はうるう年を考慮していることに注意してください。結果に明確に示されているように、2016年はうるう年であるため、2つの日付間の差は2×365 + 366 = 1096日です。
次の例は、DATEDIFF()
関数を使用して2つのDATETIME
値間の時間差を計算する方法を示しています。
SELECT DATEDIFF(hour,'2015-01-01 01:00:00','2015-01-01 03:00:00');
Code language: SQL (Structured Query Language) (sql)
結果は次のとおりです。
2
Code language: SQL (Structured Query Language) (sql)
次の例を考えてみましょう。
SELECT DATEDIFF(hour,'2015-01-01 01:00:00','2015-01-01 03:45:00');
Code language: SQL (Structured Query Language) (sql)
これも2を返します。なぜなら、DATEDIFF()
関数は整数のみを返すからです。この場合、分は切り捨てられ、時間部分のみが考慮されます。
2
Code language: SQL (Structured Query Language) (sql)
次の例は、2018年1月1日までの従業員の勤続年数を計算する方法を示しています。
SELECT first_name,
last_name,
DATEDIFF(year, hire_date, '2018-01-01') year_of_services
FROM employees;
Code language: SQL (Structured Query Language) (sql)
MySQLでのDATEDIFF
SQL Serverとは異なり、MySQLのDATEDIFF()
関数の構文は少し異なります。
DATEDIFF(startdate,enddate)
Code language: SQL (Structured Query Language) (sql)
MySQLは、2つの日付間の差を日数でしか返しません。計算では日付の時間部分は無視されます。次の例を参照してください。
SELECT DATEDIFF('2018-08-09','2018-08-18');
Code language: SQL (Structured Query Language) (sql)
結果は9日です。
9
Code language: SQL (Structured Query Language) (sql)
このチュートリアルでは、SQLのDATEDIFF()
関数を使用して2つの日付の差を計算する方法を学習しました。