MySQLの日付関数 22選
- MySQL
-
2022-10-04 - 更新:2024-08-30
MySQLで使用できる日付の加算や減算等の関数をご紹介します。
現在の日付を返す CURDATE()
現在の日付を返します。
CURRENT_DATE(), CURRENT_DATEはCURDATE()のシノニムです。
mysql> SELECT CURDATE();
-> '2008-06-13'
mysql> SELECT CURDATE() + 0;
-> 20080613
日付部分を抽出する DATE()
書式:DATE(expr)
日付exprの日付部分を抽出します。
mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'
日付の加算 DATE_ADD()
書式:DATE_ADD(date, INTERVAL expr unit)
日付値に時間値 (間隔) を加算します。
ADDDATE()はDATE_ADD()のシノニムです。
unit…YEAR,MONTH,DAY等
mysql> SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);
-> '2008-02-02'
mysql> SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);
-> '2008-02-02'
日付を指定された書式に設定 DATE_FORMAT()
書式:DATE_FORMAT(date, format)
日付を指定された書式に設定します。
mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
-> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
-> '4th 00 Thu 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
-> '1998 52'
mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
-> '00'
日付の減算 DATE_SUB()
書式:DATE_SUB(date, INTERVAL expr unit)
日付から時間値 (間隔) を引きます。
SUBDATE()はDATE_SUB()のシノニムです。
mysql> SELECT DATE_SUB('2005-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND);
-> '2004-12-30 22:58:59'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
日付の差を求める DATEDIFF()
書式:DATEDIFF(expr1, expr2)
2つの日付の差を求めます。
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
-> -31
曜日の名前を返す DAYNAME()
書式:DAYNAME(date)
曜日の名前を返します。
mysql> SELECT DAYNAME('2007-02-03');
-> 'Saturday'
月の日を返す DAYOFMONTH()
書式:DAYOFMONTH(date)
月の日を返します。(0 - 31)
mysql> SELECT DAYOFMONTH('2007-02-03');
-> 3
曜日インデックスを返す DAYOFWEEK()
書式:DAYOFWEEK(date)
引数の曜日インデックスを返します。
mysql> SELECT DAYOFWEEK('2007-02-03');
-> 7
年の日を返す DAYOFYEAR()
書式:DAYOFYEAR(date)
年の日を返します。(1 - 366)
mysql> SELECT DAYOFYEAR('2007-02-03');
-> 34
日付の一部を抽出 EXTRACT()
書式:EXTRACT(unit FROM date)
日付の一部を抽出します。
mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
-> 2009
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');
-> 200907
mysql> SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');
-> 20102
mysql> SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.000123');
-> 123
日付書式文字列を返す GET_FORMAT()
書式:GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
日付書式文字列を返します。
mysql> SELECT DATE_FORMAT('2003-10-03', GET_FORMAT(DATE, 'EUR'));
-> '03.10.2003'
mysql> SELECT STR_TO_DATE('10.31.2003', GET_FORMAT(DATE, 'USA'));
-> '2003-10-31'
月の最終日を返す LAST_DAY
引数の月の最終日を返します。
mysql> SELECT LAST_DAY('2003-02-05');
-> '2003-02-28'
mysql> SELECT LAST_DAY('2004-02-05');
-> '2004-02-29'
mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
-> '2004-01-31'
mysql> SELECT LAST_DAY('2003-03-32');
-> NULL
年と年間通算日から日付を作成 MAKEDATE()
書式:MAKEDATE(year, dayofyear)
年と年間通算日から日付を作成します。
mysql> SELECT MAKEDATE(2011, 31), MAKEDATE(2011, 32);
-> '2011-01-31', '2011-02-01'
mysql> SELECT MAKEDATE(2011, 365), MAKEDATE(2014, 365);
-> '2011-12-31', '2014-12-31'
mysql> SELECT MAKEDATE(2011, 0);
-> NULL
渡された日付から月を返す MONTH()
書式:MONTH(date)
渡された日付から月を返します。
mysql> SELECT MONTH('2008-02-03');
-> 2
現在の日付と時間を返す NOW()
書式:NOW([fsp])
現在の日付と時間を返します。
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), LOCALTIME(), LOCALTIME, LOCALTIMESTAMP, LOCALTIMESTAMP()はNOW()のシノニムです。
mysql> SELECT NOW();
-> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
-> 20071215235026.000000
日付を加算 PERIOD_ADD()
書式:PERIOD_ADD(P, N)
N月を期間Pに(YYMMまたはYYYYMMの書式で)加算します。
YYYYMMの書式で値を返します。
mysql> SELECT PERIOD_ADD(200801, 2);
-> 200803
日付を減算 PERIOD_DIFF()
書式:PERIOD_DIFF(P1, P2)
期間P1とP2間の月数を返します。
P1およびP2は、YYMMまたはYYYYMMの書式にする必要があります。
mysql> SELECT PERIOD_DIFF(200802, 200703);
-> 11
文字列を日付に変換 STR_TO_DATE()
書式:STR_TO_DATE(str, format)
文字列を日付に変換します。
DATE_FORMAT()関数の逆です。
mysql> SELECT STR_TO_DATE('01,5,2013', '%d,%m,%Y');
-> '2013-05-01'
mysql> SELECT STR_TO_DATE('May 1, 2013', '%M %d,%Y');
-> '2013-05-01'
対応する週番号を返す WEEK()
書式:WEEK(date)
dateに対応する週番号を返します。
mysql> SELECT WEEK('2008-02-20');
-> 7
曜日インデックスを返す WEEKDAY()
書式:WEEKDAY(date)
曜日インデックスを返します。
mysql> SELECT WEEKDAY('2008-02-03 22:23:00');
-> 6
mysql> SELECT WEEKDAY('2007-11-06');
-> 1
年を返す YEAR()
書式:YEAR(date)
年を返します。
mysql> SELECT YEAR('1987-01-01');
-> 1987
かなり紹介しましたが、これでも全部ではありません。
他もお知りになりたい場合は公式リファレンスをご覧ください。
https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html




