MariaDB(MySQL)で使用できる主な日付時刻系関数
MariaDB(MySQL)で使用できる主な日付時刻系関数をSQLで解説
SELECT NOW() AS col; +---------------------+ | col | +---------------------+ | 2024-12-14 12:05:08 | +---------------------+ SELECT NOW() + 0 AS col; +----------------+ | col | +----------------+ | 20241214120508 | +----------------+ SELECT NOW() AS col1, SLEEP(1), SYSDATE() AS col2; +---------------------+----------+---------------------+ | col1 | SLEEP(1) | col2 | +---------------------+----------+---------------------+ | 2024-12-15 12:23:32 | 0 | 2024-12-15 12:23:33 | +---------------------+----------+---------------------+
SELECT SYSDATE() AS col; +---------------------+ | col | +---------------------+ | 2024-12-14 12:05:08 | +---------------------+ SELECT SYSDATE() + 0 AS col; +----------------+ | col | +----------------+ | 20241214120508 | +----------------+ SELECT NOW() AS col1, SLEEP(1), SYSDATE() AS col2; +---------------------+----------+---------------------+ | col1 | SLEEP(1) | col2 | +---------------------+----------+---------------------+ | 2024-12-15 12:23:32 | 0 | 2024-12-15 12:23:33 | +---------------------+----------+---------------------+
- CURDATE()
-
現在の日付を'YYYY-MM-DD'または YYYYMMDD 形式の値として返す。
SELECT CURDATE() AS col; +------------+ | col | +------------+ | 2024-12-14 | +------------+ SELECT CURDATE() + 0 AS col; +----------+ | col | +----------+ | 20241214 | +----------+
- CURTIME([fsp])
-
現在の時間を'hh:mm:ss'または hhmmss 形式の値として返す。
fspは秒の小数点以下何桁(0~6)まで出力するかを指定できる。SELECT CURTIME() AS col; +----------+ | col | +----------+ | 09:40:42 | +----------+ SELECT CURTIME(6) AS col; +-----------------+ | col | +-----------------+ | 09:40:42.540114 | +-----------------+ SELECT CURTIME() + 0 AS col; +-------+ | col | +-------+ | 94042 | +-------+ SELECT CURTIME(6) + 0 AS col; +--------------+ | col | +--------------+ | 94042.540114 | +--------------+
- DATE(expr)
-
日付時刻「expr」の「日付」部分を抽出する
SELECT DATE('2024-12-14 09:40:42.540114') AS col; +------------+ | col | +------------+ | 2024-12-14 | +------------+ SELECT DATE('2024-12-14') AS col; +------------+ | col | +------------+ | 2024-12-14 | +------------+
- TIME(expr)
-
日付時刻「expr」の「時刻」部分を抽出する
SELECT TIME('2024-12-14 09:40:42.540114') AS col; +-----------------+ | col | +-----------------+ | 09:40:42.540114 | +-----------------+ SELECT TIME('2024-12-14 09:04') AS col; +----------+ | col | +----------+ | 09:04:00 | +----------+
- YEAR(expr)
-
日付時刻「expr」の「年」部分を抽出する
SELECT YEAR('2024-12-14 09:40:42.540114') AS col; +------+ | col | +------+ | 2024 | +------+ SELECT YEAR('2024-12-15') AS col; +------+ | col | +------+ | 2024 | +------+
- MONTH(expr)
-
日付時刻「expr」の「月」部分を抽出する
SELECT MONTH('2024-12-14 09:40:42.540114') AS col; +------+ | col | +------+ | 12 | +------+ SELECT MONTH('2024-01-15') AS col; +------+ | col | +------+ | 1 | +------+
- WEEKDAY(expr)
-
曜日のインデックス(月:0、火:1、水:2、木:3、金:4、土:5、日:6)を返す
ELT()関数と組み合わせると日本語の曜日も出力できる。SELECT WEEKDAY('2024-12-14 09:40:42.540114') AS col; +------+ | col | +------+ | 5 | +------+ SELECT WEEKDAY('2024-12-15') AS col; +------+ | col | +------+ | 6 | +------+ SELECT ELT(WEEKDAY('2024-12-15')+1, '月','火','水','木','金','土','日') AS col; +------+ | col | +------+ | 日 | +------+
- DAYOFMONTH(expr) 又は DAY(expr)
-
日付時刻「expr」の「日」部分を抽出する
SELECT DAYOFMONTH('2024-12-14 09:40:42.540114') AS col; +------+ | col | +------+ | 14 | +------+ SELECT DAYOFMONTH('2024-01-01') AS col; +------+ | col | +------+ | 1 | +------+
- HOUR(expr)
-
日付時刻「expr」の「時」部分を抽出する
SELECT HOUR('2024-12-14 09:40:42.540114') AS col; +------+ | col | +------+ | 9 | +------+ SELECT HOUR('2024-01-01 23:59:59') AS col; +------+ | col | +------+ | 23 | +------+ SELECT HOUR('23:59:59') AS col; +------+ | col | +------+ | 23 | +------+
- MINUTE(expr)
-
日付時刻「expr」の「分」部分を抽出する
SELECT MINUTE('2024-12-14 09:04:42.540114') AS col; +------+ | col | +------+ | 4 | +------+ SELECT MINUTE('2024-01-01 23:59:59') AS col; +------+ | col | +------+ | 59 | +------+ SELECT MINUTE('23:59:59') AS col; +------+ | col | +------+ | 59 | +------+
- SECOND(expr)
-
日付時刻「expr」の「秒」部分を抽出する
SELECT SECOND('2024-12-14 09:04:01.540114') AS col; +------+ | col | +------+ | 1 | +------+ SELECT SECOND('23:59:59') AS col; +------+ | col | +------+ | 59 | +------+
- MICROSECOND(expr)
-
日付時刻「expr」の「マイクロ秒」部分を抽出する
SELECT MICROSECOND('2024-12-14 09:04:01.540') AS col; +--------+ | col | +--------+ | 540000 | +--------+ SELECT MICROSECOND('23:59:59') AS col; +------+ | col | +------+ | 0 | +------+
- MAKEDATE(year, dayofyear)
-
「year」年から「dayofyear」日 経過した日付を返す
「dayofyear」は1以上の値を指定する。SELECT MAKEDATE(2024, 1) AS col; +------------+ | col | +------------+ | 2024-01-01 | +------------+ SELECT MAKEDATE(2024, 367) AS col; +------------+ | col | +------------+ | 2025-01-01 | +------------+
- MAKETIME(hour, minute, second)
-
「hour」時「 minute」分「second」秒の時刻を返す
SELECT MAKETIME(2, 3, 4.5) AS col; +------------+ | col | +------------+ | 02:03:04.5 | +------------+ SELECT MAKETIME(23, 59, 59) AS col; +----------+ | col | +----------+ | 23:59:59 | +----------+
- LAST_DAY(expr)
-
日付時刻「expr」の月に対する最終日の日付を返す
SELECT LAST_DAY('2024-02-01') AS col; +------------+ | col | +------------+ | 2024-02-29 | +------------+ SELECT LAST_DAY('2023-02-01 23:59:59') AS col; +------------+ | col | +------------+ | 2023-02-28 | +------------+
- DATE_FORMAT(expr, format)
-
日付時刻「expr」を書式「format」に設定して返す
指定子 説明 %y 年2桁 %Y 年4桁 %c 月1~2桁 %m 月2桁 %M 英語の月名 (January..December) %b 英語の略月名(Jan..Dec) %w 曜日のインデックス(日:0、月:1、火:2、水:3、木:4、金:5、土:6) %W 英語の曜日名(Sunday..Saturday) %a 英語の略曜日名(Sun..Sat) %e 日1~2桁 %d 日2桁 %T 24時間制の時分秒 hh:mm:ss %r 12時間制の時分秒 hh:mm:ss にAM又はPM %k 24時間制の時1~2桁 %H 24時間制の時2桁 %l 12時間制の時1~2桁 %h 12時間制の時2桁 %I 12時間制の時2桁 %p 12時間制の午前(AM)と午後(PM) %i 分2桁 %s 秒2桁 %f マイクロ秒6桁 SELECT DATE_FORMAT('2024-01-01 13:1:1', '%Y/%m/%d(%a) %T') AS col; +--------------------------+ | col | +--------------------------+ | 2024/01/01(Mon) 13:01:01 | +--------------------------+ SELECT DATE_FORMAT('2024-01-01 13:1:1', '%y/%c/%e(%W) %p%h:%i:%s') AS col; +---------------------------+ | col | +---------------------------+ | 24/1/1(Monday) PM01:01:01 | +---------------------------+
- STR_TO_DATE(str,format)
-
DATE_FORMATの逆で、文字列を日付時刻に変換して返す
SELECT STR_TO_DATE('2024/01/01 13:01:01', '%Y/%m/%d %T') AS col; +---------------------+ | col | +---------------------+ | 2024-01-01 13:01:01 | +---------------------+ SELECT STR_TO_DATE('24/1/1 01:01:01 PM', '%y/%c/%e %h:%i:%s %p') AS col; +---------------------+ | col | +---------------------+ | 2024-01-01 13:01:01 | +---------------------+
-
DATE_ADD(date, INTERVAL expr unit) 又は ADDDATE(date, INTERVAL expr unit)
DATE_SUB(date, INTERVAL expr unit) 又は SUBDATE(date, INTERVAL expr unit) -
日付演算(日付の加算、日付の減算)を行って返す
SELECT DATE_ADD('2023-02-01', INTERVAL 28 DAY) AS col; +------------+ | col | +------------+ | 2023-03-01 | +------------+ SELECT DATE_ADD('2023-02-01', INTERVAL -28 DAY) AS col; +------------+ | col | +------------+ | 2023-01-04 | +------------+ SELECT DATE_ADD('2023-01-31', INTERVAL 1 MONTH) AS col; +------------+ | col | +------------+ | 2023-02-28 | +------------+ SELECT DATE_ADD('2024-02-29', INTERVAL -1 YEAR) AS col; +------------+ | col | +------------+ | 2023-02-28 | +------------+ SELECT DATE_ADD('2024-02-29 23:59:59', INTERVAL 1 HOUR) AS col; +---------------------+ | col | +---------------------+ | 2024-03-01 00:59:59 | +---------------------+ SELECT DATE_ADD('2024-02-29 23:59:59', INTERVAL 1 MINUTE) AS col; +---------------------+ | col | +---------------------+ | 2024-03-01 00:00:59 | +---------------------+ SELECT DATE_ADD('2024-02-29 23:59:59', INTERVAL 1 SECOND) AS col; +---------------------+ | col | +---------------------+ | 2024-03-01 00:00:00 | +---------------------+
- ADDTIME(expr1,expr2)
-
「expr1」から「expr2」で示す日時を足した日付時間を返す
SELECT ADDTIME('2024-01-01 00:00:01', '2 00:00:02') AS col; +---------------------+ | col | +---------------------+ | 2024-01-03 00:00:03 | +---------------------+ SELECT ADDTIME('01:01:01', '00:00:02') AS col; +----------+ | col | +----------+ | 01:01:03 | +----------+
- SUBTIME(expr1,expr2)
-
「expr1」から「expr2」で示す日時を引いた日付時間を返す
SELECT SUBTIME('2024-01-01 00:00:01', '2 00:00:02') AS col; +---------------------+ | col | +---------------------+ | 2023-12-29 23:59:59 | +---------------------+ SELECT SUBTIME('01:01:01', '00:00:02') AS col; +----------+ | col | +----------+ | 01:00:59 | +----------+
- TIMEDIFF(expr1,expr2)
-
「expr1」から「expr2」で示す日付時間、又は時間を引いた時間を返す
SELECT TIMEDIFF('2024-01-01 00:00:00', '2024-01-01 00:00:01') AS col; +-----------+ | col | +-----------+ | -00:00:01 | +-----------+ SELECT TIMEDIFF('2024-01-02 00:00:00', '2024-01-01 00:00:01') AS col; +----------+ | col | +----------+ | 23:59:59 | +----------+ SELECT TIMEDIFF('23:00:00', '00:00:01') AS col; +----------+ | col | +----------+ | 22:59:59 | +----------+
- SEC_TO_TIME(second)
-
秒「second」を hh:mm:ss 形式に変換する
SELECT SEC_TO_TIME(23*60*60 + 59*60 + 59) AS col; +----------+ | col | +----------+ | 23:59:59 | +----------+
- TIME_TO_SEC(time)
-
時間「time」を秒に変換する
SELECT TIME_TO_SEC('23:59:59') AS col; +-------+ | col | +-------+ | 86399 | +-------+
- TO_SECONDS(expr)
-
日付時刻「expr」を 0年からの通算秒に変換する
SELECT TO_SECONDS('0000-01-01') AS col; +-------+ | col | +-------+ | 86400 | +-------+ SELECT TO_SECONDS('0000-01-01 00:00:01') AS col; +-------+ | col | +-------+ | 86401 | +-------+
- FROM_UNIXTIME(expr)
-
UNIXタイムから日付時刻に変換する
UNIXタイムとは 世界協定時間(UTC)の1970-01-01 00:00:00 からの経過秒数SELECT FROM_UNIXTIME(0) AS col; +---------------------+ | col | +---------------------+ | 1970-01-01 09:00:00 | +---------------------+
- UNIX_TIMESTAMP(expr)
-
日付時刻からUNIXタイムに変換する
SELECT UNIX_TIMESTAMP('2000-01-01 01:01:01') AS col; +-----------+ | col | +-----------+ | 946656061 | +-----------+