カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

MySQLの日付関数 22選

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)
期間P1P2間の月数を返します。
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

この記事がお役に立ちましたらシェアお願いします
902 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です