- 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