概要:このチュートリアルでは、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つの日付の差を計算する方法を学習しました。