MySQLの日付関数についてよく使うものを備忘録としてまとめました。
現在の日時
SELECT CURDATE() AS cur_d,
NOW() cur_dt;
+-------------+----------------------------+
| cur_d | cur_dt |
+-------------+----------------------------+
| 2020-09-20 | 2020-09-21 12:34:56 |
+-------------+----------------------------+
現在の日時を YYYY-MM-DD HH:MM:SS形式で表示
SELECT DATE_FORMAT(CURDATE(), "%Y-%m-%d %H:%i:%s") AS fmt_d,
DATE_FORMAT(NOW(), "%Y-%m-%d %H:%i:%s") AS fmt_dt;
+---------------------+---------------------+
| fmt_d | fmt_dt |
+---------------------+---------------------+
| 2020-09-20 00:00:00 | 2020-09-20 12:34:56 |
+---------------------+---------------------+
現在の日時を日(時分秒は全て0)で丸める
SELECT DATE_FORMAT(DATE(NOW()), "%Y-%m-%d %H:%i:%s") AS dt_trc;
+---------------------+
| dt_trc |
+---------------------+
| 2020-09-20T00:00:00 |
+---------------------+
現在の日時に日を加算
SELECT DATE_ADD(CURDATE(), INTERVAL 1 DAY) AS d_add,
DATE_ADD(NOW(), INTERVAL 1 DAY) AS dt_add;
+-------------+----------------------------+
| d_add | dt_add |
+-------------+----------------------------+
| 2020-09-21 | 2020-09-21 12:34:56 |
+-------------+----------------------------+
日付から一部(年/月/日)を抽出
SELECT
EXTRACT(YEAR FROM '2021-05-15') AS YYYY
, EXTRACT(YEAR_MONTH FROM '2021-05-15 01:02:03') AS YYYYMM
, EXTRACT(DAY_MINUTE FROM '2021-05-15 01:02:03') AS DDHHMI
, EXTRACT(MICROSECOND FROM '2021-05-15 10:30:00.000123') AS SS
;
+----------+----------+----------+----------+
| YYYY | YYYYMM | DDHHMI | SS |
+-------------+-------+----------+----------+
| 2021 | 202105 | 150102 | 123 |
+----------+----------+----------+----------+
文字列から日付型へ変換
SELECT STR_TO_DATE('2020-09-20', '%Y-%m-%d') AS str_d_1,
STR_TO_DATE('2020年9月20日', '%Y年%m月%d日') AS str_d_2;
+-------------+---------------------+
| prs_d | prs_dt |
+-------------+---------------------+
| 2020-09-20 | 2020-09-20 |
+-------------+---------------------+
月初と月末
SELECT
DATE_FORMAT( CURDATE(), '%Y-%m-01') AS 今月1日(月初)
, LAST_DAY( now()) AS 今月末
, DATE_FORMAT( DATE_ADD(CURDATE(), INTERVAL -1 MONTH), '%Y-%m-01') AS 先月1日(月初)
, LAST_DAY( DATE_FORMAT( DATE_ADD(CURDATE(), INTERVAL -1 MONTH), '%Y-%m-01')) AS 先月末
;
+--------------+--------------+--------------+--------------+
| 今月1日(月初) | 今月末 | 先月1日(月初) | 先月末 |
+--------------+--------------+--------------+--------------+
| 2020-09-01 | 2020-09-31 | 2020-08-01 | 2020-08-31 |
+--------------+--------------+--------------+--------------+