外观
日期函数
adddate(d,n)
返回指定日期加上指定天数后的日期
mysql
/**
计算在2021-06-06的基础上加上60天后的日期
输出:2017-08-14
*/
select adddate("2017-06-15", 60);1
2
3
4
5
2
3
4
5
addtime(t,n)
返回指定时间加上指定时间后的时间
mysql
/**
2021-06-06 23:23:10 加 8 秒
得到:2021-06-06 23:23:18
*/
select addtime("2021-06-06 23:23:10", 8);
/**
2021-06-06 23:23:10 加 1小时10分5秒
得到:2021-06-07 00:33:15
*/
select addtime("2021-06-06 23:23:10", "1:10:5");1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
curdate()
返回当前日期。格式为 YYYY-MM-DD
datediff(d1,d2)
返回两个日期相隔的天数
dayofyear(d)
返回指定日期是本年的第几天
extract(type from d)
从日期 d 中返回 type 类型的值
type 的枚举值有:hour、minute、second、microsecond、year、month、day、week、quarter、year_month、day_hour、day_minute、day_second、hour_minute、hour_second、minute_second。
mysql
-- 得到 `11`
select extract (minute from "2021-06-06 23:11:11");1
2
2
now()
返回当前日期和时间
mysql
-- 得到格式如:YYYY-MM-DD HH:mm:ss
select now();1
2
2
quarter(d)
返回日期对应的季度数,范围是 1~4
second(t)
返回指定时间中的秒数
timediff(time1, time2)
计算时间差
mysql
-- 得到:`838:59:59`
select timediff("2021-06-06 16:42:45", "2020-06-06 16:42:45");1
2
2
date(t)
从指定日期时间中提取日期值
mysql
-- 得到:`2021-06-16`
select date("2021-06-16 23:11:11");1
2
2
hour(t)
返回指定时间中的小时数
time(expression)
提取日期时间参数中的时间部分
mysql
-- 提取 `2021-06-06 16:42:45` 的时间部分,得到 `16:42:45`
select time("2021-06-06 16:42:45");1
2
2
time_format(t,f)
根据表达式显示时间
year(d)
返回指定日期的年份
查询 emp 表中所有在 1978 年和 1985 年之间出生的员工,显示姓名、出生日期:
mysql
select ename, birthday
from emp
where year(birthday) between 1978 and 1985;1
2
3
2
3
month(d)
查询要在本月过生日的所有员工:
mysql
SELECT *
FROM emp
WHERE MONTH(CURDATE()) = MONTH(birthday);1
2
3
2
3
TO_DAYS(d)
把日期 / 日期时间转为从公元 0 年到该日期的总天数(纯数字)。只识别 DATE/DATETIME 合法格式,时间部分会直接忽略。
sql
SELECT TO_DAYS('2021-06-06');
SELECT TO_DAYS('2021-06-06 16:42:45'); -- 时间自动忽略1
2
2
TO_DAYS(d) 输出一串纯数字天数,常用于 RANGE 分区
sql
PARTITION BY RANGE (TO_DAYS(create_time)) (
PARTITION p202601 VALUES LESS THAN (TO_DAYS('2026-02-01')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);1
2
3
4
2
3
4
为什么用 TO_DAYS:RANGE 分区要求表达式结果是数字,直接放日期会报错,转成天数数字才能分区。
FROM_DAYS(num)
TO_DAYS(d) 的反向函数。
sql
SELECT FROM_DAYS(TO_DAYS('2026-07-26'));1