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

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

相关推荐
陌上丨4 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_56784 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw5 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30735 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道5 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
麦聪聊数据6 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务6 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯8 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七8 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草8 小时前
redis-9-哨兵
数据库·redis·bootstrap