MySQL 提供了多种日期和时间函数来处理日期,例如查找当前日期、时间、格式化、提取日期部分、时间部分等。
MySQL 日期函数
以下是可用于处理日期和时间的所有 MySQL 日期函数列表。您可以点击每个日期和时间函数以查看其详细信息和多个示例。或者,向下滚动以查看每个日期和时间函数的示例。
| MySQL 日期和时间函数 | 描述 |
|---|---|
| ADDDATE() | 将给定的日期加上时间间隔。 |
| ADDTIME() | 添加时间 |
| CONVERT_TZ() | 将日期和时间从一个时区转换为另一个时区。 |
| CURDATE() | 返回当前日期 |
| CURRENT_DATE, CURRENT_DATE() | 此函数是 CURDATE() 的同义词 |
| CURRENT_TIME(), CURRENT_TIME | CURTIME() 函数的同义词 |
| CURRENT_TIMESTAMP() ,CURRENT_TIMESTAMP | NOW() 函数的同义词 |
| CURTIME() | 这个 MySQL 函数返回当前时间 |
| DATE() | 从给定的日期或日期时间表达式中提取日期部分 |
| DATE_ADD() | 将给定的时间间隔添加到日期表达式中 |
| DATE_FORMAT() | 此方法按照我们的要求格式化日期。 |
| DATE_SUB() | 从给定的日期中减去指定的时间间隔。 |
| DATEDIFF() | 从一个日期减去另一个日期并返回差值。 |
| DAY() | DAYOFMONTH() 函数的同义词。 |
| DAYNAME() | 此 MySQL 日期函数返回星期几的名称。例如星期一 |
| DAYOFMONTH() | 返回月份中的第几天,从 1 到 31 |
| DAYOFWEEK() | 返回用户给定日期的星期索引。 |
| DAYOFYEAR() | 返回一年中的第几天或天数,即 1 到 366 |
| EXTRACT() | 使用此函数提取日期的部分。 |
| FROM_DAYS() | 此日期函数将给定的天数转换为日期。 |
| FROM_UNIXTIME() | 用于将 Unix 时间戳格式化为日期 |
| GET_FORMAT() | 此函数返回日期格式字符串。 |
| HOUR() | 返回给定时间的小时值。 |
| LAST_DAY | 返回给定日期的月份中的最后一天。 |
| LOCALTIME(), LOCALTIME | NOW() 函数的同义词 |
| LOCALTIMESTAMP(), LOCALTIMESTAMP | NOW() 函数的同义词 |
| MAKEDATE() | 用于从指定的年份和一年中的天数创建或生成日期。 |
| MAKETIME() | 这将从小时、分钟、秒创建或生成时间 |
| MICROSECOND() | 返回给定时间或日期时间中的微秒部分。 |
| MINUTE() | 此 MySQL 日期函数返回给定时间或日期时间中的分钟值。 |
| MONTH() | 返回月份编号 (1 – 12) |
| MONTHNAME() | 返回月份名称或月份的名称(一月、二月等) |
| NOW() | 此日期函数返回当前日期和时间。 |
| PERIOD_ADD() | 将用户指定的期间添加到年月中 |
| PERIOD_DIFF() | 返回两个期间之间的差值。它返回这两个期间之间的月份数。 |
| QUARTER() | 查找并返回该日期属于哪个季度 |
| SEC_TO_TIME() | 将给定的秒数转换为 HH:MM:SS 格式的时间。 |
| SECOND() | 返回给定时间的小时值(0-59)。 |
| STR_TO_DATE() | 此函数将字符串转换为日期。 |
| SUBDATE() | DATE_SUB() 函数的同义词 |
| SUBTIME() | 从时间中减去期间。 |
| SYSDATE() | 返回函数执行时所在的当前系统日期和时间 |
| TIME() | 此 MySQL 日期函数从给定的日期时间或表达式中提取时间部分。 |
| TIME_FORMAT() | 使用此函数将给定的表达式格式化为时间。 |
| TIME_TO_SEC() | 此方法将给定时间转换为秒。 |
| TIMEDIFF() | 减去时间。 |
| TIMESTAMP() | 返回日期或日期时间表达式。 |
| TIMESTAMPADD() | 将期间添加到日期时间表达式中 |
| TIMESTAMPDIFF() | 此函数从给定的日期时间表达式中减去期间。 |
| TO_DAYS() | 将给定的日期转换为总天数。 |
| TO_SECONDS() | 将给定的日期或日期时间表达式转换为自公元元年以来的秒数。 |
| UNIX_TimeStamp | 用于返回 Unix 时间戳 |
| UTC_Date | 返回当前的 UTC 日期 |
| UTC_Time | 此方法返回当前的 UTC 时间 |
| UTC_TimeStamp | 返回当前的 UTC 日期和时间。 |
| Week | 此方法返回周数 |
| Weekday | 返回星期几的索引 |
| WeekOfYear | 返回日期的日历周。范围从 1 到 53 |
| Year | 返回年份值。 |
| YearWeek | 返回年份和周数 |
MySQL 中日期和时间函数的时态间隔
以下是可用的时态间隔表达式和单位值列表。
| UNIT VALUE | 预期表达式格式 |
|---|---|
| MICROSECOND | MICROSECONDS |
| SECOND | SECONDS |
| MINUTE | MINUTES |
| HOUR | HOURS |
| DAY | DAYS |
| WEEK | WEEKS |
| MONTH | MONTHS |
| QUARTER | QUARTERS |
| YEAR | YEARS |
| SECOND_MICROSECOND | ‘SECONDS.MICROSECONDS’ |
| MINUTE_MICROSECOND | ‘MINUTES:SECONDS.MICROSECONDS’ |
| MINUTE_SECOND | ‘MINUTES:SECONDS’ |
| HOUR_MICROSECOND | ‘HOURS:MINUTES:SECONDS.MICROSECONDS’ |
| HOUR_SECOND | ‘HOURS:MINUTES:SECONDS’ |
| HOUR_MINUTE | ‘HOURS:MINUTES’ |
| DAY_MICROSECOND | ‘DAYS HOURS:MINUTES:SECONDS.MICROSECONDS’ |
| DAY_SECOND | ‘DAYS HOURS:MINUTES:SECONDS’ |
| DAY_MINUTE | ‘DAYS HOURS:MINUTES’ |
| DAY_HOUR | ‘DAYS HOURS’ |
| YEAR_MONTH | ‘YEARS-MONTHS’ |
MySQL 日期和时间函数示例
以下示例将帮助您理解 MySQL 中的这些日期和时间函数。
ADDDATE, ADDTIME, CONVERT_TZ 函数
在此示例中,我们将使用 ADDDATE 和 ADDTIME 来添加给定的值。接下来,我们使用 CONVERT_TZ 将日期从一个标准转换为另一个标准。
SELECT ADDDATE('2016-01-02', INTERVAL 2 MONTH), ADDDATE('2018-02-01', INTERVAL 31 DAY);
SELECT ADDTIME('2018-12-31 23:55:57', '2 2:22:22');
SELECT CONVERT_TZ('2018-12-31 23:59:59', '+00:00', '-05:30');

MySQL CURDATE 和 CURRENT_DATE 日期函数
在此示例中,我们将使用 CURDATE(), CURRENT_DATE 和 CURRENT_DATE() 方法来查找当前日期。
SELECT CURDATE(), CURDATE() + 5;
SELECT CURRENT_DATE, CURRENT_DATE + 2;
SELECT CURRENT_DATE(), CURRENT_DATE() + 10;

MySQL curtime, current_time 时间函数
在此示例中,我们将使用 CURTIME, CURRENT_TIME(), CURRENT_TIME 来查找当前时间。
SELECT CURTIME(), CURTIME() + 1;
SELECT CURRENT_TIME(), CURRENT_TIME() + 10;
SELECT CURRENT_TIME, CURRENT_TIME + 2;

在此日期函数示例中,我们将使用 DATE 获取日期,使用 DATEDIFF 计算两个日期之间的差值。接下来,我们使用 DATE_ADD 添加日期间隔。
SELECT DATE('2018-12-31 12:59:59'), DATE('2012-11-18 11:22:33');
SELECT DATEDIFF('2018-12-31', '2019-02-03'), DATEDIFF('2018-12-01', '2018-02-01');
SELECT DATE_ADD('2018-12-31', INTERVAL 2 DAY), DATE_ADD('2018-12-31', INTERVAL 2 YEAR);

MySQL date_format, date_sub, day 日期函数
在此示例中,我们将使用 DATE_FORMAT 来格式化给定的日期。 DATE_SUB 用于从中减去间隔。接下来,我们使用 DAY 返回日期的值。
SELECT DATE_FORMAT('2018-12-31 23:59:59', '%W, %D %M %Y');
SELECT DATE_SUB('2018-12-31', INTERVAL 12 DAY), DATE_SUB('2018-12-31', INTERVAL 2 YEAR);
SELECT DAY('2018-12-31'), DAY('2018-01-01');

在此日期函数示例中,我们将使用 DAYNAME 和 DAYOFMONTH 方法获取日期的名称,以及月份中的第几天。接下来,我们使用 DAYOFWEEK 获取星期几的索引号。
SELECT DAYNAME('2018-12-31'), DAYNAME('2019-01-01');
SELECT DAYOFMONTH('2018-12-14'), DAYOFMONTH('2019-01-31');
SELECT DAYOFWEEK('2018-12-14'), DAYOFWEEK('2019-01-31');

MySQL 日期函数 – extract, from_days, from_unixtime
在这里,我们使用 EXTRACT 从日期中提取日期部分。使用 FROM_DAYS 从给定的天数返回日期。使用 FROM_UNIXTIME 将 Unix 时间戳格式化为日期和时间。
SELECT EXTRACT(YEAR FROM '2019-07-02'), EXTRACT(MONTH FROM '2018-12-31');
SELECT FROM_DAYS(100000), FROM_DAYS(950010);
SELECT FROM_UNIXTIME(122227899), FROM_UNIXTIME(1233456789);

在此示例中,我们将使用 HOUR 获取小时值,LAST_DAY 获取月份中的最后一天。这里,GET_FORMAT 需要与 DATE_FORMAT 或 STR_TO_DATE 一起使用。
SELECT DATE_FORMAT('2018-12-31', GET_FORMAT(DATE, 'EUR'));
SELECT HOUR('12:22:33'), HOUR('23:59:59'), HOUR('2019-01-02 17:12:13');
SELECT LAST_DAY('2018-04-12'), LAST_DAY('2018-02-05');

MySQL 日期函数 – localtime, local timestamp
在此示例中,我们将使用 LOCALTIME, LOCALTIME(), 和 LOCALTIMESTAMP 来获取当前日期和时间。
SELECT LOCALTIME, LOCALTIME + 1;
SELECT LOCALTIME(), LOCALTIME() + 15;
SELECT LOCALTIMESTAMP, LOCALTIMESTAMP + 4;

LOCALTIMESTAMP 和 CURRENT_TIMESTAMP 示例 10
在此示例中,我们使用 LOCALTIMESTAMP(), CURRENT_TIMESTAMP, 和 CURRENT_TIMESTAMP() 方法来获取当前日期和时间。
SELECT LOCALTIMESTAMP(), LOCALTIMESTAMP() + 10;
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + 10;
SELECT CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP() + 10;

MySQL 日期函数 – makedate, maketime, microsecond
在此示例中,我们使用 MAKEDATE 从年份和一年中的天数创建日期。接下来,使用 MAKETIME 从小时、分钟和秒创建时间。然后,我们使用 MICROSECOND 提取或返回微秒值。
SELECT MAKEDATE(2018, 28), MAKEDATE(2018, 364);
SELECT MAKETIME(10, 11, 22), MAKETIME(23, 59, 58);
SELECT MICROSECOND('10:22:33.324567'), MICROSECOND('19:11:22.112233');

MINUTE 和 MONTH NAME 示例 12
在这里,我们将使用 MINUTE 获取分钟值。接下来,我们使用 MONTH 和 MONTHNAME 获取月份编号和月份名称(月份的名称)。
SELECT MINUTE('10:22:33.324567'), MINUTE('2018-02-04 19:11:22');
SELECT MONTH('2018-12-31'), MONTH('2018-02-04 19:11:22');
SELECT MONTHNAME('2018-12-31'), MONTHNAME('2018-01-04 19:11:22');

now, period_add, period_diff 示例
在此示例中,我们将使用 NOW 来获取当前日期和时间。接下来,我们使用 PERIOD_ADD 和 PERIOD_DIFF 来添加月份和计算两个期间之间的差异。
SELECT NOW(), NOW() + 5;
SELECT PERIOD_ADD(201801, 3), PERIOD_ADD(201802, 10);
SELECT PERIOD_DIFF(201812, 201907), PERIOD_DIFF(201812, 201802);

MySQL second, sec_to_time, and str_to_date 日期函数
在此示例中,我们将使用 SECOND 获取秒数,SEC_TO_TIME 将给定的秒数转换为时间。接下来,我们使用 STR_TO_DATE 将字符串转换为日期。
SELECT SECOND('10:22:33.324567'), SECOND('2018-02-04 19:11:22');
SELECT SEC_TO_TIME(3652), SEC_TO_TIME(9875);
SELECT STR_TO_DATE('April 1, 2018', '%M %d, %Y');

SUBDATE, SUBTIME, and SYSDATE 示例
在此示例中,我们将使用 SUBDATE 和 SUBTIME 从给定的日期或时间中减去日期或时间间隔。接下来,我们使用 SYSDATE 返回系统日期时间。
SELECT SUBDATE('2018-12-31', INTERVAL 15 DAY), SUBDATE('2018-12-31', INTERVAL 2 YEAR);
SELECT SUBTIME('2018-12-31 10:11:12', '3 13:48:47');
SELECT SYSDATE(), SYSDATE() + 2;

TIME, TIMEDIFF, and TIMESTAMP 示例 16
在此示例中,我们将使用 TIME 获取时间,使用 TIMEDIFF 计算两个时间值之间的差值。接下来,我们使用 TIMESTAMP 返回日期时间。
SELECT TIME('2018-01-31 10:22:33.324567'), TIME('2018-02-04 19:11:22');
SELECT TIMEDIFF('2018-12-31 23:59:59.111222', '2018-12-30 01:10:10.333444');
SELECT TIMESTAMP('2018-12-31'), TIMESTAMP('2018-12-31 23:59:59');

MySQL 时间函数 – timestampadd, time_format, timestampdiff
在此示例中,我们将使用 TIMESTAMPADD 添加时间间隔到日期,使用 TIMESTAMPDIFF 计算两个时间戳之间的差值。接下来,我们使用 TIME_FORMAT 格式化给定的时间。
SELECT TIMESTAMPADD(HOUR, 13, '2018-01-31 10:22:33'), TIMESTAMPADD(MINUTE, 48, '2018-02-04 19:11:22');
SELECT TIMESTAMPDIFF(MONTH, '2018-01-31', '2018-12-30'), TIMESTAMPDIFF(MINUTE,'2018-02-04', '2018-02-04 19:11:22');
SELECT TIME_FORMAT('4:12:13', '%k %i %S');

TIME_TO_SECONDS 和 TO_DAYS 示例
在此 MySQL 日期函数示例中,我们将使用 TIME_TO_SECONDS 将给定的时间转换为秒数。接下来,我们使用 TO_DAYS 返回天数。
SELECT TIME_FORMAT('4:12:13', '%k %i %S');
SELECT TIME_TO_SEC('23:59:59'), TIME_TO_SEC('10:10:00');
SELECT TO_DAYS('1947-08-15'), TO_DAYS('2018-12-31');

在这里,我们使用 TO_SECONDS 将日期转换为秒,并使用 UNIX_TIMESTAMP 返回 Unix 时间戳。接下来,我们使用 UTC_DATE 获取 UTC 日期值。
SELECT TO_SECONDS('1947-08-15'), TO_SECONDS('2018-12-31');
SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP('2018-12-31 23:59:59');
SELECT UTC_DATE, UTC_DATE();

WEEK, UTC_TIME, and UTC_TIMESTAMP 示例
我们使用 UTC_TIME 获取时间,使用 UTC_TIMESTAMP 计算 UTC 日期时间。接下来,我们使用 WEEK 获取周数。
SELECT UTC_TIME, UTC_TIME();
SELECT UTC_TIMESTAMP, UTC_TIMESTAMP();
SELECT WEEK('2018-12-31'), WEEK('2018-12-31', 1);

WEEKDAY, WEEKOFYEAR, and YEAR 示例
在此示例中,我们将使用 WEEKDAY 获取索引号,WEEKOFYEAR 计算日历周。接下来,我们使用 YEAR 从给定的日期中获取年份值。
SELECT WEEKDAY('2018-03-31'), WEEKDAY('2018-12-04 23:59:59');
SELECT WEEKOFYEAR('2018-12-31'), WEEKOFYEAR('2018-12-04 23:59:59');
SELECT YEAR('1947-08-15'), YEAR('2018-12-31');

在此示例中,我们使用 YEARWEEK 函数从给定的日期返回年份和周数。
SELECT YEARWEEK('1947-08-15'), YEARWEEK('2018-12-31');
