CDA持证人阿涛哥

2022-11-30   阅读量: 339

Mysql

mysql学习31--日期时间函数

扫码加入数据分析学习群

#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 ;


57.2838 1 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子