#MySQL 日期时间函数
#函数名 描述 实例
-- ADDDATE(d,n) 计算起始日期 d 加上 n 天的日期
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
#->2017-06-25
-- ADDTIME(t,n) n 是一个时间表达式,时间 t 加上时间表达式 n
#加 5 秒:
SELECT ADDTIME('2011-11-11 11:11:11', 5);
#->2011-11-11 11:11:16 (秒)
#添加 2 小时, 10 分钟, 5 秒:
SELECT ADDTIME("2020-06-15 09:34:21", "2:10:5");
#-> 2020-06-15 11:44:26
-- CURDATE() 返回当前日期
SELECT CURDATE();
#-> 2018-09-19
-- CURRENT_DATE() 返回当前日期
SELECT CURRENT_DATE();
# -> 2018-09-19
-- CURRENT_TIME 返回当前时间
SELECT CURRENT_TIME();
#-> 19:59:02
-- CURRENT_TIMESTAMP() 返回当前日期和时间
SELECT CURRENT_TIMESTAMP();
#-> 2018-09-19 20:57:43
-- CURTIME() 返回当前时间
SELECT CURTIME();
#-> 19:59:02
-- DATE() 从日期或日期时间表达式中提取日期值
SELECT DATE("2017-06-15");
#-> 2017-06-15
-- DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数
SELECT DATEDIFF('2001-01-01','2001-02-02');
#-> -32
-- DATE_ADD(d,INTERVAL expr type) 计算起始日期 d 加上一个时间段后的日期,type 值可以是:
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
MINUTE_SECOND
HOUR_SECOND
HOUR_MINUTE
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
SELECT DATE_ADD("2017-06-15", INTERVAL 10 DAY 15 MINUTE );
#-> 2017-06-25
SELECT DATE_ADD("2017-06-15 09:34:21", INTERVAL 15 MINUTE);
#-> 2017-06-15 09:49:21
SELECT DATE_ADD("2017-06-15 09:34:21", INTERVAL 3 HOUR);
#->2017-06-15 12:34:21
SELECT DATE_ADD("2017-06-15 09:34:21", INTERVAL -3 HOUR);
#->2017-06-15 06:34:21
-- DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d
SELECT DATE_FORMAT('2011-11-11 18:11:11','%Y/%m/%d %r');
#-> 2011/11/11 06:11:11 PM
SELECT DATE_FORMAT('2011-11-11 18:11:11','%Y-%m-%d %H:%m:%s');
#-> 2011-11-11 18:11:11
-- DATE_SUB(date,INTERVAL expr type) 函数从日期减去指定的时间间隔。
#Orders 表中 OrderDate 字段减去 2 天:
SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders;
-- DAY(d) 返回日期值 d 的日期部分
SELECT DAY("2017-06-15");
#-> 15
-- DAYNAME(d) 返回日期 d 是星期几,如 Monday,Tuesday
SELECT DAYNAME('2011-11-11 11:11:11');
#->Friday
-- DAYOFMONTH(d) 计算日期 d 是本月的第几天
SELECT DAYOFMONTH('2011-11-11 11:11:11');
#->11
-- DAYOFWEEK(d) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推
SELECT DAYOFWEEK('2011-11-11 11:11:11');
#->6
-- DAYOFYEAR(d) 计算日期 d 是本年的第几天
SELECT DAYOFYEAR('2011-11-11 11:11:11');
#->315
-- EXTRACT(type FROM d) 从日期 d 中获取指定的值,type 指定返回的值。
type可取值为:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH;
SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11');
#-> 11
-- FROM_DAYS(n) 计算从 0000 年 1 月 1 日开始 n 天后的日期
SELECT FROM_DAYS(1111);
#-> 0003-01-16
-- HOUR(t) 返回 t 中的小时值
SELECT HOUR('01:22:36');
#-> 1
-- LAST_DAY(d) 返回给给定日期的那一月份的最后一天
SELECT LAST_DAY("2017-06-20");
#-> 2017-06-30
-- LOCALTIME() 返回当前日期和时间
SELECT LOCALTIME();
#-> 2018-09-19 20:57:43
-- LOCALTIMESTAMP() 返回当前日期和时间
SELECT LOCALTIMESTAMP();
#-> 2018-09-19 20:57:43
-- MAKEDATE(year, day-of-year) 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期
SELECT MAKEDATE(2017, 3);
#-> 2017-01-03
-- MAKETIME(hour, minute, second) 组合时间,参数分别为小时、分钟、秒
SELECT MAKETIME(11, 35, 4);
#-> 11:35:04
-- MICROSECOND(date) 返回日期参数所对应的微秒数
SELECT MICROSECOND("2017-06-20 09:34:25.000023");
#-> 23
-- MINUTE(t) 返回 t 中的分钟值
SELECT MINUTE('1:2:3');
#-> 2
-- MONTHNAME(d) 返回日期当中的月份名称,如 November
SELECT MONTHNAME('2011-11-11 11:11:11');
#-> November
-- MONTH(d) 返回日期d中的月份值,1 到 12
SELECT MONTH('2011-11-11 11:11:11');
#->11
-- NOW() 返回当前日期和时间
SELECT NOW();
#-> 2018-09-19 20:57:43
# PERIOD_ADD(period, number) 为 年-月 组合日期添加一个时段
SELECT PERIOD_ADD(201703, 5);
#-> 201708
-- PERIOD_DIFF(period1, period2) 返回两个时段之间的月份差值天数
SELECT PERIOD_DIFF(201710, 201703);
#-> 7
-- QUARTER(d) 返回日期d是第几季节,返回 1 到 4
SELECT QUARTER('2011-11-11 11:11:11');
#-> 4
-- SECOND(t) 返回 t 中的秒钟值
SELECT SECOND('1:2:3')
#-> 3
-- SEC_TO_TIME(s) 将以秒为单位的时间 s 转换为时分秒的格式
SELECT SEC_TO_TIME(4320);
#-> 01:12:00
-- STR_TO_DATE(string, format_mask) 将字符串转变为日期
SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
#-> 2017-08-10
-- SUBDATE(d,n) 日期 d 减去 n 天后的日期
SELECT SUBDATE('2011-11-11 11:11:11', 1);
#->2011-11-10 11:11:11 (默认是天)
-- SUBTIME(t,n) 时间 t 减去 n 秒的时间
SELECT SUBTIME('2011-11-11 11:11:11', 5);
#->2011-11-11 11:11:06 (秒)
-- SYSDATE() 返回当前日期和时间
SELECT SYSDATE();
#-> 2018-09-19 20:57:43
-- TIME(expression) 提取传入表达式的时间部分
SELECT TIME("19:30:10");
#-> 19:30:10
-- TIME_FORMAT(t,f) 按表达式 f 的要求显示时间 t
SELECT TIME_FORMAT('11:11:11','%r');
#11:11:11 AM
-- TIME_TO_SEC(t) 将时间 t 转换为秒
SELECT TIME_TO_SEC('1:12:00');
#-> 4320
-- TIMEDIFF(time1, time2) 计算时间差值
SELECT TIMEDIFF("15:19:11", "13:10:10");
#-> 02:09:01
-- TIMESTAMP(expression, interval) 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和
SELECT TIMESTAMP("2017-07-23", "13:10:11");
#-> 2017-07-23 13:10:11
-- TO_DAYS(d) 计算日期 d 距离 0000 年 1 月 1 日的天数
SELECT TO_DAYS('0001-01-01 01:01:01');
#-> 366
-- WEEK(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53
SELECT WEEK('2011-11-11 11:11:11');
#-> 45
-- WEEKDAY(d) 日期 d 是星期几,0 表示星期一,1 表示星期二
SELECT WEEKDAY("2017-06-15");
#-> 3
-- WEEKOFYEAR(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53
SELECT WEEKOFYEAR('2011-11-11 11:11:11');
#-> 45
-- YEAR(d) 返回年份
SELECT YEAR("2017-06-15");
#-> 2017
-- YEARWEEK(date, mode) 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推
SELECT YEARWEEK("2017-06-15");
#-> 201724
-- 练习:查询每位员工的工龄(年):ename,hiredate,工龄
select ename 员工姓名, hiredate 入职日期, timestampdiff(year,hiredate,curdate()) 工龄
from emp ;
暂无数据