函数-3-日期函数
函数-3-日期函数
- 日期函数
- 语法
- 案例演示
- 案例实战
- 题目
- 解题
日期函数
常见的日期函数如下:
函数 | 功能 |
---|---|
CURDATE() | 返回当前日期 |
CERTIME() | 返回当前时间 |
NOW() | 返回当前日期和时间 |
YEAR(date) | 获取指定 date 的年份 |
MONTH(date) | 获取指定 date 的月份 |
DAY(date) | 获取指定 date 的日期 |
DATE_ADD(date, INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔 expr 后的时间值 |
DATEDIFF(date1, date2) | 返回起始时间 date1 和结束时间 date2 之间的天数 |
语法
SELECT 函数名(参数)
案例演示
-
获取当天日期, 格式为: 年-月-日
select curdate();
-
获取当前时间, 格式为: 时:分:秒
select curtime();
-
获取当前日期和时间, 格式为: 年-月-日 时:分:秒
select now();
-
获取当前日期年份, 格式为: 年
select year(curdate());
-
获取当前日期月份, 格式为: 月
select month(curdate());
-
获取当天日期, 格式为: 日
select day(curdate());
-
获取一周后的日期和时间, 格式为: 年-月-日 时:分:秒
这个语法结构相对复杂. 其中
INTERVAL
是固定关键字,expr
是一个表示时间间隔长度的数值表达式,type
是一个时间单位关键字, 用于指定expr
数值所代表的时间单位.type
的有效值包括DAY
、MONTH
、YEAR
、HOUR
、MINUTE
、SECOND
等。select date_add(now(), interval 7 day);
-
计算今天是今年的第几天
DATEDIFF()
返回表示为从一个日期到另一个日期的天数的值.expr1
和expr2
是日期或日期和时间表达式. 在计算中仅使用值的日期部分. 注意计算是expr1
-expr2
做这题的时候, 我们先获取当前日期, 然后利用字符串的拼接, 将当前年份和1月1日的日期字符串拼接在一起, 函数会自动进行一个隐式转换, 所以不用担心
select datediff(curdate(), concat(year(now()), '-01-01'));
案例实战
题目
查询所有员工的入职天数, 并根据入职天数倒序排序
解题
首先, 我们得先查看一下整个表, 以确认入职时间
的数据类型, 使用 desc
直接查看表结构可以
desc emp_info;
或者使用查询语句直接查看表也可以, 这里使用了 limit
, 因为我们不需要知道表的数据, 只是为了查看入职时间
的字段类型格式, MySQL
在执行 limit 1
时会在找到第一条符合条件的数据后立即终止扫描. 即使没有可用索引(全表扫描),引擎也只需读取第一行数据即返回结果, 所以当表数据量大的时候, 巧用 limit
有可能可以减少查询的时间.
select *
from emp_info
limit 1;
得到入职时间
的结构之后, 我们就可以确定如何计算入职天数
了, 因为是 Date
类型需要使用, 所以我们计算的时候会使用到 date
函数, 如下:
select name as `员工名称`, entry_time as `入职时间`, datediff(curdate(), emp_info.entry_time) as `入职天数`
from emp_info
order by `入职天数` desc;
这里为了截图好看那么一点, 我给他们起了一个别名, 而且是中文的, 这里有一个习惯, 如果是非英文的别名, 尽量使用反引号`
将其包裹住, 之前的章节中我习惯用了字符串的'
进行包裹, 其实这并不是比较良好的习惯, 希望大家引以为戒