需要注意,DATE 日期格式必须是 yyyy-mm-dd 的形式。如果要进行日期比较,就要使用 DATE 函数,不要直接使用日期与字符串进行比较。
函数 | 说明 |
---|---|
ADDDATE(d, n) | 计算指定起始日期加上指定天数的日期 |
ADDTIME(t, n) | 计算指定起始时间加上指定秒数的时间 |
CURDATE() | 返回当前日期 |
CURRENT_DATE() | 返回当前日期 |
CURRENT_TIME() | 返回当前时间 |
CURRENT_TIMESTAMP() | 返回当前日期和时间 |
CURTIME() | 返回当前时间 |
DATE() | 从日期或日期时间表达式中提取日期值 |
DATEDIFF(d1, d2) | 计算两个日期之间相隔的天数 |
DATE_ADD(d, INTERVAL expr type) | 计算起始日期加上一个时间段的日期 |
DATE_FORMAT(d, f) | 按照指定格式格式化日期 |
DATE_SUB(date, INTERVALexpr type) | 计算指定日期减去指定时间的间隔 |
DAY(d) | 返回指定日期中日期(day)的部分 |
DAYNAME(d) | 返回指定日期是星期几 |
DAYOFMONTH(d) | 计算指定日期是本月第几天 |
DAYOFWEEK(d) | 计算指定日期是本周星期几 |
DAYOFYEAR(d) | 计算指定日期是本年第几天 |
EXTRACT(type FROM d) | 从指定日期中获取指定部位的值 |
FROM_DAY(n) | 计算从 0000 年 1 月 1 日开始后指定天数的日期 |
HOUR(t) | 返回时间表达式中的小时值 |
LAST_DAY(d) | 返回指定日期的那一月份的最后一天 |
LOCALTIME() | 返回当前日期和时间 |
LOCALTIMESTAMP() | 返回当前日期和时间 |
MAKEDATE(year, day-of-year) | 计算指定年份和天数的日期 |
MAKETIME(hour, minute, second) | 返回指定时分秒组合而成的时间值 |
MICROSECOND(date) | 返回日期参数所对应的微秒数 |
MINUTE(t) | 返回时间表达式中的分钟值 |
MONTHNAME(d) | 返回日期当中的月份名称 |
MONTH(d) | 返回日期中的月份值 |
NOW() | 返回当前日期和时间 |
PERIOD_ADD(period, number) | 返回两个时段之间分月份差值 |
QUARTER(d) | 返回指定日期是本年度的第几季节 |
SECOND(t) | 返回时间表达式中的秒钟值 |
SEC_TO_TIME(s) | 将以秒为单位的时间转换为时分秒的格式 |
STR_TO_DATE(string, format_mask) | 将字符串转变为日期 |
SUBDATE(d, n) | 计算指定日期减去指定天数的日期 |
SUBTIME(t, n) | 计算指定时间减去指定秒数的时间 |
SYSDATE() | 返回当前日期和时间 |
TIME(expression) | 提取传入表达式中的时间部分 |
TIME_DORMAT(t, f) | 按表达式的要求显示时间 |
TIME_TO_SEC(t) | 将时间表达式转换为秒 |
TIMEDIFF(time1, time2) | 计算两个时间表达式之间的差值 |
TIMESTAMP(expression, interval) | 返回日期或日期时间表达式 |
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2) | 计算两个日期时间的时间差(可指定差的维度) |
TO_DAYS(d) | 计算指定日期距离初始年份的天数 |
WEEK(d) | 计算指定日期是本年度的第几个星期 |
WEEKDAY(d) | 计算指定日期是星期几 |
WEEKOFYEAR(d) | 计算指定日期是本年的第几个星期 |
YEAR(d) | 返回年份 |
YEARWEEK(date, mode) | 返回年份及第几周 |
格式符 | 格式说明 |
---|---|
%S 和 %s | 两位数字形式的秒(00, 01, ..., 59) |
%i | 两位数字形式的分 |
%H | 两位数字形式的小时,24 小时 |
%h 和 %I | 两位数字形式的小时,12 小时 |
%k | 数字形式的小时,24 小时 |
%l | 数字形式的小时,12 小时 |
%T | 24 小时的时间形式(hh:mm:ss) |
%r | 12 小时的时间形式(hh:mm:ssAM 或 hh:mm:ssPM) |
%p | AM 或 PM |
%W | 一周中每一天的名称(Sunday, Monday, ..., Saturday) |
%a | 一周中每一天名称的缩写(Sun, Mon, ..., Sat) |
%d | 两位数字表示月中的天数(00, 01, ..., 31) |
%e | 数字形式表示月中的天数(1, 2, ..., 31) |
%D | 英文后缀表示月中的天数(1st, 2nd, 3rd) |
%w | 以数字形式表示周中的天数(0=Sunday, 1=Monday, ..., 6=Saturday) |
%j | 以 3 位数字表示年中的天数(001, 002, ..., 366) |
%U | 周(0, 1, ..., 52),其中 Sunday 为周中的第一天 |
%u | 周(0, 1, ..., 52),其中 Monday 为周中的第一天 |
%M | 月名(January, February, ..., December) |
%b | 缩写的月名(January, February, ..., December) |
%m | 两位数字表示的月份(01, 02, ..., 12) |
%c | 数字表示的月份(1, 2, ..., 12) |
%Y | 4 位数字表示的年份 |
%y | 两位数字表示的年份 |
%% | 直接值 “%” |
计算起始日期 d
加上 n
天的日期。
语法:
ADDDATE(d, n)
🌰 示例:
SELECTADDDATE('2023-02-14', INTERVAL 10 DAY);-- 输出结果+----------------------------------------+| ADDDATE('2023-02-14', interval 10 day) |+----------------------------------------+| 2023-02-24 |+----------------------------------------+
计算起始日期时间 t
加上时间表达式 n
的时间。
语法:
ADDTIME(t, n)
🌰 示例:
SELECTADDTIME('2023-02-14 12:00:00', 10);-- 输出结果+------------------------------------+| ADDTIME('2023-02-14 12:00:00', 10) |+------------------------------------+| 2023-02-14 12:00:10 |+------------------------------------+
返回当前日期。
语法:
CURATE()
🌰 示例:
SELECTCURATE();-- 输出结果+------------+| CURATE() |+------------+| 2023-03-25 |+------------+
返回当前日期。
语法:
CURRENT_DATE()
🌰 示例:
SELECTCURRENT_DATE();-- 输出结果+----------------+| CURRENT_DATE() |+----------------+| 2023-03-25 |+----------------+
返回当前时间。
语法:
CURRENT_TIME()
🌰 示例:
SELECTCURRENT_TIME();-- 输出结果+----------------+| CURRENT_TIME() |+----------------+| 19:28:53 |+----------------+
返回当前日期和时间。
语法:
CURRENT_TIMESTAMP()
🌰 示例:
SELECTCURRENT_TIMESTAMP();-- 输出结果+---------------------+| CURRENT_TIMESTAMP() |+---------------------+| 2023-03-25 19:29:38 |+---------------------+
返回当前时间。
语法:
CURTIME()
🌰 示例:
SELECTCURTIME();-- 输出结果+-----------+| CURTIME() |+-----------+| 19:53:07 |+-----------+
从日期或日期时间表达式中提取日期值。
语法:
DATE()
🌰 示例:
SELECTDATE('2023-02-14');-- 输出结果+--------------------+| DATE('2023-02-14') |+--------------------+| 2023-02-14 |+--------------------+
计算日期 d1 -> d2
之间相隔的天数。
语法:
DATEDIFF(d1, d2)
🌰 示例:
SELECTDATEDIFF('2023-02-14', '2023-02-28');-- 输出结果+--------------------------------------+| datediff('2023-02-14', '2023-02-28') |+--------------------------------------+| -14 |+--------------------------------------+
计算起始日期 d
加上一个时间段后的日期。
语法:
DATE_ADD(d, INTERVAL expr type);
参数 type
的值:
🌰 示例:
SELECTDATE_ADD('2023-02-14', INTERVAL 10 DAY);-- 输出结果+-----------------------------------------+| DATE_ADD('2023-02-14', INTERVAL 10 DAY) |+-----------------------------------------+| 2023-02-24 |+-----------------------------------------+
SELECTDATE_ADD('2023-02-14 10:20:30', INTERVAL 15 MINUTE);-- 输出结果+-----------------------------------------------------+| DATE_ADD('2023-02-14 10:20:30', INTERVAL 15 MINUTE) |+-----------------------------------------------------+| 2023-02-14 10:35:30 |+-----------------------------------------------------+
SELECTDATE_ADD('2023-02-14 10:20:30', INTERVAL -3 HOUR);-- 输出结果+---------------------------------------------------+| DATE_ADD('2023-02-14 10:20:30', INTERVAL -3 HOUR) |+---------------------------------------------------+| 2023-02-14 07:20:30 |+---------------------------------------------------+
SELECTDATE_ADD('2023-02-14 10:20:30', INTERVAL -3 MONTH);-- 输出结果+----------------------------------------------------+| DATE_ADD('2023-02-14 10:20:30', INTERVAL -3 MONTH) |+----------------------------------------------------+| 2022-11-14 10:20:30 |+----------------------------------------------------+
按表达式 f
的要求显示日期 d
。
语法:
DATE_FORMAT(d, f)
🌰 示例:
SELECTDATE_FORMAT('2023-03-01 12:50:30', '%Y-%m-%d %r');-- 输出结果+---------------------------------------------------+| DATE_FORMAT('2023-03-01 12:50:30', '%Y-%m-%d %r') |+---------------------------------------------------+| 2023-03-01 12:50:30 PM |+---------------------------------------------------+
🌰 示例:日期时间转换为时间戳
SELECTDATE_FORMAT("2022-01-19 19:45:20", "%Y%m%d%H%i%s");-- 输出 20220119194520+----------------------------------------------------+| DATE_FORMAT("2022-01-19 19:45:20", "%Y%m%d%H%i%s") |+----------------------------------------------------+| 20220119194520 |+----------------------------------------------------+
🌰 示例:日期转换字符串(必须带分隔符,常用中划线 -
作为日期分隔符)
SELECTDATE_FORMAT("2022-01-19 19:45:20", "%Y-%m-%d");-- 输出 2022-01-19+------------------------------------------------+| DATE_FORMAT("2022-01-19 19:45:20", "%Y-%m-%d") |+------------------------------------------------+| 2022-01-19 |+------------------------------------------------+
🌰 示例:时间转换字符串(必须带分隔符,常用冒号 :
作为时间分隔符)
SELECTDATE_FORMAT('2022-01-19 19:45:20', '%H:%i:%s');-- 输出 19+------------------------------------------------+| DATE_FORMAT('2022-01-19 19:45:20', '%H:%i:%s') |+------------------------------------------------+| 19:45:20 |+------------------------------------------------+
函数从日期减去指定的时间间隔。
语法:
DATE_SUB(date, INTERVAL expr type)
🌰 示例:orders 表中 order_date 字段减去 2 天
SELECTorder_id,DATE_SUB(order_date, INTERVAL 2 DAY) AS order_pay_dayFROMorders;
返回日期值 d
的日期部分。
语法:
DAY(d)
🌰 示例:
SELECTDAY('2023-02-14');-- 输出结果+-------------------+| DAY('2023-02-14') |+-------------------+| 14 |+-------------------+
返回日期 d
是星期几,如 MOnday、Tuesday。
语法:
DAYNAME(d)
🌰 示例:
SELECTDAYNAME('2023-02-14');-- 输出结果+-----------------------+| DAYNAME('2023-02-14') |+-----------------------+| Tuesday |+-----------------------+
计算日期 d
是本月的第几天。
语法:
DAYOFMONTH(d)
🌰 示例:
SELECTDAYOFMONTH('2023-03-15 11:11:11');-- 输出结果+--------------------------+| DAYOFMONTH('2023-03-15') |+--------------------------+| 15 |+--------------------------+
计算日期 d
是本周的星期几,1 是星期一,2 是星期二,以此类推。
语法:
DAYOFWEEK(d)
🌰 示例:
SELECTDAYOFWEEK('2023-03-15 11:11:11');-- 输出结果+----------------------------------+| DAYOFWEEK('2023-03-15 11:11:11') |+----------------------------------+| 4 |+----------------------------------+
计算日期 d
时本年的第几天。
语法:
DAYOFYEAR(d)
🌰 示例:
SELECTDAYOFYEAR('2023-03-15 11:11:11');-- 输出结果+----------------------------------+| DAYOFYEAR('2023-03-15 11:11:11') |+----------------------------------+| 74 |+----------------------------------+
从日期 d
中获取指定的值,type
指定返回的值。
参数 type
的值:
语法:
EXTRACT(type FROM d)
🌰 示例:
SELECTEXTRACT(MINUTE FROM '2023-03-15 11:11:11');-- 输出结果+--------------------------------------------+| extract(minute from '2023-03-15 11:11:11') |+--------------------------------------------+| 11 |+--------------------------------------------+
计算从 0000 年 1 月 1 日开始 n
天后的日期。
语法:
FROM_DAYS(n)
🌰 示例:
SELECTFROM_DAYS(999);-- 输出结果+----------------+| FROM_DAYS(999) |+----------------+| 0002-09-26 |+----------------+
返回 t
中的小时值。
语法:
HOUR(t)
🌰 示例:
SELECTHOUR('1:2:3');-- 输出结果+---------------+| hour('1:2:3') |+---------------+| 1 |+---------------+
返回给定日期的那一月份的最后一天。
语法:
LAST_DAY(d);
🌰 示例:
SELECTLAST_DAY('2023-02-14');-- 输出结果+------------------------+| LAST_DAY('2023-02-14') |+------------------------+| 2023-02-28 |+------------------------+
返回当前日期和时间。
语法:
LOCALTIME();
🌰 示例:
SELECTLOCALTIME();-- 输出结果+---------------------+| LOCALTIME() |+---------------------+| 2023-03-26 00:17:33 |+---------------------+
返回当前日期和时间。
语法:
LOCALTIMESTAMP();
🌰 示例:
SELECTLOCALTIMESTAMP();-- 输出结果+---------------------+| LOCALTIMESTAMP() |+---------------------+| 2023-03-26 00:18:10 |+---------------------+
机遇给定参数年份 year
和所在年中的天数序号 day-of-year 返回一个日期
语法:
MAKEDATE(year, day-of-yer);
🌰 示例:
SELECTMAKEDATE(2023, 8);-- 输出结果+-------------------+| makedate(2023, 8) |+-------------------+| 2023-01-08 |+-------------------+
组合时间,参数分别为小时、分、种、秒。
语法:
MAKETIME(hour, minute, second);
🌰 示例:
SELECTMAKETIME(15, 28, 5);-- 输出结果+---------------------+| MAKETIME(15, 28, 5) |+---------------------+| 15:28:05 |+---------------------+
返回日期参数所对应的微秒数。
语法:
MICROSECOND(date);
🌰 示例:
SELECTMICROSECOND('2023-03-15 09:34:00.000023');-- 输出结果+-------------------------------------------+| MICROSECOND('2023-03-15 09:34:00.000023') |+-------------------------------------------+| 23 |+-------------------------------------------+
返回 t
中的分钟值
语法:
MINUTE(date);
🌰 示例:
SELECTMINUTE('1:2:3');-- 输出结果+-----------------+| MINUTE('1:2:3') |+-----------------+| 2 |+-----------------+
返回日期当中的月份名称,如 November。
语法:
MONTHNAME(date);
🌰 示例:
SELECTMONTHNAME('2023-03-15 11:11:11');-- 输出结果+----------------------------------+| MONTHNAME('2023-03-15 11:11:11') |+----------------------------------+| March |+----------------------------------+
返回指定日期中的月份值,1 到 12。
语法:
MONTH(date);
🌰 示例:
SELECTMONTH('2023-03-15 12:00:00');-- 输出结果+------------------------------+| MONTH('2023-03-15 12:00:00') |+------------------------------+| 3 |+------------------------------+
返回当前日期和时间。
语法:
NOW();
🌰 示例:
SELECTNOW();-- 输出结果+---------------------+| NOW() |+---------------------+| 2023-03-26 01:04:34 |+---------------------+
为年-月组合日期添加一个时段。
语法:
PERIOD_ADD(period, number);
🌰 示例:
SELECTPERIOD_ADD(202303, 5);-- 输出结果+-----------------------+| PERIOD_ADD(202303, 5) |+-----------------------+| 202308 |+-----------------------+
返回两个时段之间的月份差值。
语法:
PERIOD_DIFF(period1, period2);
🌰 示例:
SELECTPERIOD_DIFF(202303, 5);-- 输出结果+-----------------------------+| PERIOD_DIFF(202303, 202308) |+-----------------------------+| -5 |+-----------------------------+
返回指定日期时第几季度,返回 1-4。
语法:
QUARTER(d);
🌰 示例:
SELECTQUARTER('2023-03-15 12:15:30');-- 输出结果+--------------------------------+| QUARTER('2023-03-15 12:15:30') |+--------------------------------+| 1 |+--------------------------------+
返回制定时间中的秒钟值。
语法:
SECOND(d);
🌰 示例:
SELECTSECOND('2023-03-15 12:15:30');-- 输出结果+-------------------------------+| SECOND('2023-03-15 12:15:30') |+-------------------------------+| 30 |+-------------------------------+
将以秒为单位的时间转换为时分秒的格式。
语法:
SEC_TO_TIME(s);
🌰 示例:
SELECTSEC_TO_TIME(s);-- 输出结果+-------------------+| sec_to_time(9999) |+-------------------+| 02:46:39 |+-------------------+
将字符串转变为日期。
语法:
STR_TO_DATE(string, format_mask);
🌰 示例:
SELECTSTR_TO_DATE("March 26 2023", "%M %d %Y");-- 输出结果+------------------------------------------+| STR_TO_DATE("March 26 2023", "%M %d %Y") |+------------------------------------------+| 2023-03-26 |+------------------------------------------+
指定日期减去 n
天后的日期。
语法:
SUBDATE(d, n);
🌰 示例:
SELECTSUBDATE("2023-03-26 15:15:30", 5);-- 输出结果+-----------------------------------+| SUBDATE("2023-03-26 15:15:30", 5) |+-----------------------------------+| 2023-03-21 15:15:30 |+-----------------------------------+
指定时间减去 n
秒后的时间。
语法:
SUBTIME(t, n);
🌰 示例:
SELECTSUBDATE("2023-03-26 15:15:30", 30);-- 输出结果+------------------------------------+| SUBTIME("2023-03-26 15:15:30", 59) |+------------------------------------+| 2023-03-26 15:14:31 |+------------------------------------+
注意:
- 最多减去 60 秒
返回当前日期和时间。
语法:
SYSDATE();
🌰 示例:
SELECTSYSDATE();-- 输出结果+---------------------+| SYSDATE() |+---------------------+| 2023-03-26 17:12:02 |+---------------------+
提取传入表达式的时间部分。
语法:
TIME(expression);
🌰 示例:
SELECTTIME("2023-03-26 20:30:15");-- 输出结果+-----------------------------+| TIME("2023-03-26 20:30:15") |+-----------------------------+| 20:30:15 |+-----------------------------+
指定时间值并通过表达式转换为对应格式的时间值。
语法:
TIME_FORMAT(t, f);
🌰 示例:
SELECTTIME_FORMAT("20:30:15", '%r');-- 输出结果+-------------------------------+| TIME_FORMAT("20:30:15", '%r') |+-------------------------------+| 08:30:15 PM |+-------------------------------+
将指定时间转换为秒。
语法:
TIME_TO_SEC(t);
🌰 示例:
SELECTTIME_TO_SEC("2023-03-26 20:30:15");-- 输出结果+------------------------------------+| TIME_TO_SEC("2023-03-26 20:30:15") |+------------------------------------+| 73815 |+------------------------------------+
计算时间差值。
语法:
TIMEDIFF(t1, t2);
🌰 示例:
SELECTTIMEDIFF("20:30:15", "12:30:15");-- 输出结果+----------------------------------+| TIMEDIFF("20:30:15", "12:30:15") |+----------------------------------+| 08:00:00 |+----------------------------------+SELECTTIMEDIFF("2023-01-01 00:00:00", "2023-12-31 23:59:59");-- 输出结果+--------------------------------------------------------+| TIMEDIFF("2023-01-01 00:00:00", "2023-12-31 23:59:59") |+--------------------------------------------------------+| -838:59:59 |+--------------------------------------------------------+
单个参数时,函数返回日期或日期时间表达式。两个参数时,返回参数加和。
语法:
TIMESTAMP(expression, interval);
🌰 示例:
SELECTTIMESTAMP("2023-03-26");-- 输出结果+-------------------------+| TIMESTAMP("2023-03-26") |+-------------------------+| 2023-03-26 00:00:00 |+-------------------------+SELECTTIMESTAMP("2023-03-26", "20:30:15");-- 输出结果+-------------------------------------+| TIMESTAMP("2023-03-26", "20:30:15") |+-------------------------------------+| 2023-03-26 20:30:15 |+-------------------------------------+
计算时间差,返回 datetime_expr2 - datetime_expr1
的时间差。
语法:
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2);
🌰 示例:
SELECTTIMESTAMPDIFF(DAY, "2023-03-26", "2023-03-01");-- 输出结果+------------------------------------------------+| TIMESTAMPDIFF(DAY, "2023-03-26", "2023-03-01") |+------------------------------------------------+| -25 |+------------------------------------------------+SELECTTIMESTAMPDIFF(YEAR, "2023-12-31", "2021-08-15");-- 输出结果+-------------------------------------------------+| TIMESTAMPDIFF(YEAR, "2023-12-31", "2022-08-15") |+-------------------------------------------------+| -1 |+-------------------------------------------------+
计算指定日期距离 0000 年 1 月 1 日的天数。
语法:
TO_DAYS(d);
🌰 示例:
SELECTTIMESTAMPDIFF(DAY, "2023-03-26 20:30:15");-- 输出结果+--------------------------------+| TO_DAYS("2023-03-26 20:30:15") |+--------------------------------+| 738970 |+--------------------------------+
计算指定日期是本年的第几个星期,范围是 0 到 53。
语法:
WEEK(d);
🌰 示例:
SELECTWEEK("2023-03-26 20:30:15");-- 输出结果+-----------------------------+| WEEK("2023-03-26 20:30:15") |+-----------------------------+| 13 |+-----------------------------+
计算指定日期是星期几,0 表示星期一,1 表示星期二。
语法:
WEEKDAY(d);
🌰 示例:
SELECTWEEKDAY("2023-03-26 20:30:15");-- 输出结果+--------------------------------+| WEEKDAY("2023-03-26 20:30:15") |+--------------------------------+| 6 |+--------------------------------+
计算指定日期是本年的第几个星期,范围是 0 到 53。
语法:
WEEKOFYEAR(d);
🌰 示例:
SELECTWEEKOFYEAR("2023-03-26 20:30:15");-- 输出结果+-----------------------------------+| WEEKOFYEAR("2023-03-26 20:30:15") |+-----------------------------------+| 12 |+-----------------------------------+
返回年份。
语法:
YEAR(d);
🌰 示例:
SELECTYEAR("2023-03-26 20:30:15");-- 输出结果+-----------------------------+| YEAR("2023-03-26 20:30:15") |+-----------------------------+| 2023 |+-----------------------------+
返回年份及第几周(0 到 53),mode
中 0 表示周天,1 表示周一,以此类推。
语法:
YEARWEEK(date, mode);
🌰 示例:
SELECTYEARWEEK("2023-03-26 20:30:15");-- 输出结果+---------------------------------+| YEARWEEK("2023-03-26 20:30:15") |+---------------------------------+| 202313 |+---------------------------------+