函数-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 之间的天数

语法

sql 复制代码
SELECT 函数名(参数)

案例演示

  1. 获取当天日期, 格式为: 年-月-日

    sql 复制代码
    select curdate();
  2. 获取当前时间, 格式为: 时:分:秒

    sql 复制代码
    select curtime();
  3. 获取当前日期和时间, 格式为: 年-月-日 时:分:秒

    sql 复制代码
    select now();
  4. 获取当前日期年份, 格式为: 年

    sql 复制代码
    select year(curdate());
  5. 获取当前日期月份, 格式为: 月

    sql 复制代码
    select month(curdate());
  6. 获取当天日期, 格式为: 日

    sql 复制代码
    select day(curdate());
  7. 获取一周后的日期和时间, 格式为: 年-月-日 时:分:秒

    这个语法结构相对复杂. 其中 INTERVAL 是固定关键字, expr 是一个表示时间间隔长度的数值表达式, type 是一个时间单位关键字, 用于指定 expr 数值所代表的时间单位. type 的有效值包括 DAYMONTHYEARHOURMINUTESECOND 等。

    sql 复制代码
    select date_add(now(), interval 7 day);
  8. 计算今天是今年的第几天

    DATEDIFF() 返回表示为从一个日期到另一个日期的天数的值. expr1expr2 是日期或日期和时间表达式. 在计算中仅使用值的日期部分. 注意计算是 expr1 - expr2

    做这题的时候, 我们先获取当前日期, 然后利用字符串的拼接, 将当前年份和1月1日的日期字符串拼接在一起, 函数会自动进行一个隐式转换, 所以不用担心

    sql 复制代码
    select datediff(curdate(), concat(year(now()), '-01-01'));

案例实战

题目

查询所有员工的入职天数, 并根据入职天数倒序排序

解题

首先, 我们得先查看一下整个表, 以确认入职时间的数据类型, 使用 desc 直接查看表结构可以

sql 复制代码
desc emp_info;

或者使用查询语句直接查看表也可以, 这里使用了 limit, 因为我们不需要知道表的数据, 只是为了查看入职时间的字段类型格式, MySQL 在执行 limit 1 时会在找到第一条符合条件的数据后立即终止扫描. 即使没有可用索引(全表扫描),引擎也只需读取第一行数据即返回结果, 所以当表数据量大的时候, 巧用 limit 有可能可以减少查询的时间.

sql 复制代码
select *
from emp_info
limit 1;

得到入职时间的结构之后, 我们就可以确定如何计算入职天数了, 因为是 Date 类型需要使用, 所以我们计算的时候会使用到 date 函数, 如下:

sql 复制代码
select name as `员工名称`, entry_time as `入职时间`, datediff(curdate(), emp_info.entry_time) as `入职天数`
from emp_info
order by `入职天数` desc;

这里为了截图好看那么一点, 我给他们起了一个别名, 而且是中文的, 这里有一个习惯, 如果是非英文的别名, 尽量使用反引号`````将其包裹住, 之前的章节中我习惯用了字符串的'进行包裹, 其实这并不是比较良好的习惯, 希望大家引以为戒

相关推荐
笃行35021 小时前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行35021 小时前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行35021 小时前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
元Y亨H21 小时前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql
SelectDB2 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶2 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵2 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils2 天前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
SamDeepThinking2 天前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员