SQLでの日付計算処理には、データベース毎に様々な関数が用意されています。
本記事では、MySQLを使用して加算・減算・時間差の算出といったSQLでの日付計算処理の使い方についてご紹介していきたいと思います。
SQLの日付計算:加算処理
まずはSQLでの加算処理についてご紹介していきます。
加算処理用の関数は大きく「ADDTIME(時間用)」「DATE_ADD(単位指定可能)」の2種類の関数が利用可能です。
ADDTIMEの使い方
ADDTIME関数は時間を加算したい場合に利用します。
後述するDATE_ADD関数でも時間の加算は可能ですが、よりシンプルに記述することが可能です。
SELECT ADDTIME(日時, 加算したい時間);
サンプル
実際のサンプルで実行した結果を確認していきましょう。
サンプルでは指定した日時に1時間30分40秒を加算しています。
SELECT ADDTIME('2020-07-27 14:00:00', '01:30:40');
実行した結果が下記の通りです。
+--------------------------------------------+ | ADDTIME('2020-07-27 14:00:00', '01:30:40') | +--------------------------------------------+ | 2020-07-27 15:30:40 | +--------------------------------------------+
DATE_ADDの使い方
DATE_ADD関数は、ユーザーが指定した単位で日付の加算処理を行える関数です。
まずは基本構文を掲載しておきます。
SELECT DATE_ADD(日付, INTERVAL 値 単位);
単位
DATE_ADD関数で単位として設定出来る値の中から、頻繁に利用されるものを下記に掲載します。
- YEAR
- MONTH
- DAY
- HOUR
- MINUTE
- SECOND
サンプル
実際にサンプルでDATE_ADD関数を実行してみたいと思います。
サンプルでは、現在日時より2年後の日付を取得するよう指定しています。
SELECT DATE_ADD(now(), INTERVAL 2 YEAR);
実行した結果が下記の通りです。
+----------------------------------+ | DATE_ADD(now(), INTERVAL 2 YEAR) | +----------------------------------+ | 2022-07-27 16:09:54 | +----------------------------------+
SQLの日付計算:減算処理
次にSQLの日付減算処理についてご紹介していきます。
加算処理用の関数は大きく「SUBTIME(時間用)」「DATE_SUB(単位指定可能)」の2種類の関数が利用可能です。
SUBTIMEの使い方
SUBTIMEの使い方は基本的に加算処理で使用したADDTIME関数と同じです。
ADDTIMEをSUBTIMEに変更することで減算処理が実施されます。
SELECT SUBTIME(日時, 減算したい時間);
サンプル
実際のサンプルで実行した結果を確認していきましょう。
サンプルでは、指定した日時から3時間30分30秒減算した日時を抽出します。
SELECT SUBTIME('2020-07-27 17:00:00', '03:30:30');
実行した結果が下記の通りです。
+--------------------------------------------+ | SUBTIME('2020-07-27 17:00:00', '03:30:30') | +--------------------------------------------+ | 2020-07-27 13:29:30 | +--------------------------------------------+
DATE_SUBの使い方
DATE_SUBの使い方に関しては、DATE_ADD関数と基本的に同じです。
DATE_ADDをDATE_SUBに変更することで減算処理が実施されます。
SELECT DATE_SUB(日付, INTERVAL 値 単位);
単位についてはDATE_ADDと同じなので省略します。
サンプル
実際にサンプルでDATE_SUB関数を実行してみたいと思います。
サンプルでは、現在日時より3ヶ月前の日付を取得するよう指定しています。
SELECT DATE_SUB(now(), INTERVAL 3 MONTH);
実行した結果が下記の通りです。
+-----------------------------------+ | DATE_SUB(now(), INTERVAL 3 MONTH) | +-----------------------------------+ | 2020-04-27 17:02:34 | +-----------------------------------+
SQLの日付計算:差分算出
ではもうひとつ日付計算の中でも、2つの日付の差分を算出する処理についてご紹介していきたいと思います。
差分算出用の関数は大きく「TIMEDIFF(時間用)」「DATEDIFF(日付用)」「TIMESTAMPDIFF(単位指定可能)」の3種類の関数が利用可能です。
TIMEDIFFの使い方
TIMEDIFF関数は引数として2つの日時を指定することで、時間に換算した差分を算出してくれます。
SELECT TIMEDIFF(日時, 日時);
サンプル
実際にサンプルでTIMEDIFF関数を実行してみたいと思います。
SELECT TIMEDIFF('2020-07-27 14:00:00', '2020-07-25 13:30:30');
サンプルを実行した結果が下記の通りです。
+--------------------------------------------------------+ | TIMEDIFF('2020-07-27 14:00:00', '2020-07-25 13:30:30') | +--------------------------------------------------------+ | 48:29:30 | +--------------------------------------------------------+
DATEDIFFの使い方
DATEDIFF関数の使い方も、TIMEDIFF関数と同じく引数に2つの日時を指定するだけです。
DATEDIFF関数では算出結果が日付で返却されます。
SELECT DATEDIFF(日時, 日時);
サンプル
実際にサンプルでDATEDIFF関数を実行してみたいと思います。
SELECT DATEDIFF('2020-07-27 14:00:00', '2020-07-25 13:30:30');
サンプルを実行した結果が下記の通りです。
+--------------------------------------------------------+ | DATEDIFF('2020-07-27 14:00:00', '2020-07-25 13:30:30') | +--------------------------------------------------------+ | 2 | +--------------------------------------------------------+
TIMESTAMPDIFFの使い方
TIMESTAMPDIFF関数では、第一引数に単位を指定することで、指定した単位に沿った差分算出結果を返却してくれる関数です。
SELECT TIMESTAMPDIFF(単位, 日付, 日付);
TIMESTAMPDIFF関数で利用可能な単位も上述した「DATE_ADD」「DATE_SUB」関数と同様のため省略します。
サンプル
実際にサンプルでTIMESTAMPDIFF関数を実行してみたいと思います。
今回のサンプルでは時間単位で指定した日付の差分を算出しています。
SELECT TIMESTAMPDIFF(HOUR, '2020-07-27 14:00:00', '2020-07-25 13:30:30');
サンプルを実行した結果が下記の通りです。
+-------------------------------------------------------------------+ | TIMESTAMPDIFF(HOUR, '2020-07-27 14:00:00', '2020-07-25 13:30:30') | +-------------------------------------------------------------------+ | -48 | +-------------------------------------------------------------------+
さいごに:SQLの日付計算関数はデータベース毎に異なる
本記事では、SQLの日付計算処理で利用出来る関数の使い方をご紹介してきました。
本記事に掲載した内容は全てMySQLでの動作確認を行っております。
データベース毎に用意されている日付計算処理用の関数が異なるため、ご自身で利用するデータベースで提供されている関数に読み替えて各処理を試してみてください。
今回のサンプルではMySQLで利用可能な関数をご紹介していきます。