函数-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;

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

相关推荐
慕木兮人可1 小时前
Docker部署MySQL镜像
spring boot·后端·mysql·docker·ecs服务器
{⌐■_■}1 小时前
【Kafka】登录日志处理的三次阶梯式优化实践:从同步写入到Kafka多分区批处理
数据库·分布式·mysql·kafka·go
isNotNullX2 小时前
数据中台架构解析:湖仓一体的实战设计
java·大数据·数据库·架构·spark
kfepiza3 小时前
Debian10安装Mysql5.7.44 笔记250707
笔记·mysql·debian
armcsdn5 小时前
基于Docker Compose部署Traccar容器与主机MySQL的完整指南
mysql·docker·容器
睿思达DBA_WGX5 小时前
由 DB_FILES 参数导致的 dg 服务器无法同步问题
运维·数据库·oracle
袋鼠云数栈6 小时前
使用自然语言体验对话式MySQL数据库运维
大数据·运维·数据库·后端·mysql·ai·数据治理·数栈·data+ai
渣渣盟6 小时前
掌握MySQL函数:高效数据处理指南
sql·mysql·adb·dba
阿里云大数据AI技术6 小时前
数据 + 模型 驱动 AI Native 应用发展
大数据·数据库·人工智能
铅笔侠_小龙虾7 小时前
Docker 实战 -- Mysql
mysql·docker·容器