ここでは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);