【MySQL】日付や時間の比較・加算・減算・差分・計算方法


ここではMySQLで、日付や時間の比較・加算・差分・計算する方法を紹介しています。

日付を比較する方法

日付型(DATE型)の列の値を比較するときは<、<=、=、>=、>演算子を使うことが出来ます。

日付型の列と比較する値は次のSQLのように’YYYY-MM-DD’として指定します。

SELECT * FROM tab1 WHERE col2 >= '2010-10-10'; 

または’YYYYMMDD’としてハイフンなしで指定します。

SELECT * FROM tab1 WHERE col2 >= '20101010'; 

日付を加算する方法

日付を加算するときはDATE_ADD関数を使います。

SELECT DATE_ADD(CURRENT_DATE(),INTERVAL 10 DAY);

またはADDDATEと書くこともできます。

SELECT ADDDATE(CURRENT_DATE(),INTERVAL 10 DAY);

月の加算

日付型の値に月を加算するときも、DATE_ADD関数を使います。

次のSQLでは現在の日付に1ヵ月を追加しています。加算する値に1を、加算する単位にMONTHを指定しています。

SELECT DATE_ADD(CURRENT_DATE(),INTERVAL 1 MONTH);

日付を減算する方法

日付を減算するときはDATE_SUB関数を使います。

SELECT DATE_SUB(CURRENT_DATE(),INTERVAL 10 DAY);

またはSUBDATEと書くこともできます。

SELECT SUBDATE(CURRENT_DATE(),INTERVAL 10 DAY);

日付の差分を出す方法

日付の差分はDATEDIFF関数を使うことで取得することが出来ます。

引数1-引数2の差を求めます。

SELECT
 DATEDIFF(DATE_ADD(CURRENT_DATE()
                    ,INTERVAL 10 DAY)
           ,CURRENT_DATE()
          )
;

月の差分

PERIOD_DIFF関数を使うことで、2つの値の月の差分を計算し、取得することが出来ます。

PERIOD_DIFF関数の使い方は次の通りです。
計算結果は値1-値2となります。

SELECT DATE_ADD(CURRENT_DATE(),INTERVAL 1 MONTH);

日付を減算する方法

日付を減算するときはDATE_SUB関数を使います。

SELECT DATE_SUB(CURRENT_DATE(),INTERVAL 10 DAY);

またはSUBDATEと書くこともできます。

SELECT SUBDATE(CURRENT_DATE(),INTERVAL 10 DAY);

日付の差分を出す方法

日付の差分はDATEDIFF関数を使うことで取得することが出来ます。

引数1-引数2の差を求めます。

SELECT
 DATEDIFF(DATE_ADD(CURRENT_DATE()
                    ,INTERVAL 10 DAY)
           ,CURRENT_DATE()
          )
;

月の差分

PERIOD_DIFF関数を使うことで、2つの値の月の差分を計算し、取得することが出来ます。

PERIOD_DIFF関数の使い方は次の通りです。
計算結果は値1-値2となります。

PERIOD_DIFF(値1,値2)

値にはYYYYMMもしくはYYMMの書式で年月を指定します。
実際に使ってみた結果が次の通りです。

mysql> SELECT PERIOD_DIFF('201012','201010');
+--------------------------------+
| PERIOD_DIFF('201012','201010') |
+--------------------------------+
|                              2 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> SELECT PERIOD_DIFF('201010','201012');
+--------------------------------+
| PERIOD_DIFF('201010','201012') |
+--------------------------------+
|                             -2 |
+--------------------------------+
1 row in set (0.00 sec)

YYMMでも同様の結果となりました。

mysql> SELECT PERIOD_DIFF('1012','1010');
+----------------------------+
| PERIOD_DIFF('1012','1010') |
+----------------------------+
|                          2 |
+----------------------------+
1 row in set (0.00 sec)

mysql> SELECT PERIOD_DIFF('1010','1012');
+----------------------------+
| PERIOD_DIFF('1010','1012') |
+----------------------------+
|                         -2 |
+----------------------------+
1 row in set (0.00 sec)

時間の加算

何時間後、何分後、何秒後という時間を加算する場合は、DATE_ADD関数を使います。

-- 1時間後
SELECT DATE_ADD(NOW(),INTERVAL 1 HOUR);

-- 30分後
SELECT DATE_ADD(NOW(),INTERVAL 30 MINUTE);

-- 30秒後
SELECT DATE_ADD(NOW(),INTERVAL 30 SECOND);

時間の減算

何時間前、何分前、何秒前という時間を減算する場合は、DATE_SUB関数を使います。

-- 1時間前
SELECT DATE_SUB(NOW(),INTERVAL 1 HOUR);

-- 30分前
SELECT DATE_SUB(NOW(),INTERVAL 30 MINUTE);

-- 30秒前
SELECT DATE_SUB(NOW(),INTERVAL 30 SECOND);