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

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

相关推荐
Mico1823 分钟前
麒麟v10-MySQL InnoDB Cluster 完整部署与全场景验证(从入门到精通)
数据库·mysql
杨云龙UP38 分钟前
生产环境MySQL多实例XtraBackup全量备份与rsync异地自动传输实践
linux·运维·数据库·mysql·xtrabackup·主从复制·备份恢复
熊文豪1 小时前
SQLServer数据迁移之后,那张报表还能不能秒出
数据库·sqlserver·电科金仓
JosieBook1 小时前
【数据库】把数据优势转化为决策优势:TimechoAI时序大模型使用解析
数据库
会编程的吕洞宾2 小时前
MySQL 慢查询从5秒到50毫秒:索引失效六大场景定位与实战调优
数据库·mysql
浅念-2 小时前
MySQL 索引底层完整详解|磁盘Page|B+树推导|聚簇非聚簇索引|索引SQL操作
大数据·数据库·b树·sql·mysql·面试·职场和发展
小马过河R2 小时前
数据仓库入门:是什么、怎么做、和数据库有什么区别?
大数据·数据库·数据仓库·架构·驾驭工程·fde
Mico182 小时前
Percona Toolkit 3.5.7 完整实战笔记(从入门到精通)
mysql
小白勇闯网安圈2 小时前
Django Form 组件详解:从表单生成到 ModelForm 数据校验
数据库·django·sqlite