当前位置: 首页 > news >正文

函数-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 函数名(参数)

案例演示

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

    select curdate();
    

    获取当天日期

  2. 获取当前时间, 格式为: 时:分:秒

    select curtime();
    

    获取当前时间

  3. 获取当前日期和时间, 格式为: 年-月-日 时:分:秒

    select now();
    

    当前日期和时间

  4. 获取当前日期年份, 格式为: 年

    select year(curdate());
    

    当前年份

  5. 获取当前日期月份, 格式为: 月

    select month(curdate());
    

    当前月份

  6. 获取当天日期, 格式为: 日

    select day(curdate());
    

    当天日期

  7. 获取一周后的日期和时间, 格式为: 年-月-日 时:分:秒

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

    select date_add(now(), interval 7 day);
    

    一周后的现在

  8. 计算今天是今年的第几天

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

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

    select datediff(curdate(), concat(year(now()), '-01-01'));
    

    今年第n天

案例实战

题目

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

解题

首先, 我们得先查看一下整个表, 以确认入职时间的数据类型, 使用 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;

计算入职天数

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

http://www.dtcms.com/a/270482.html

相关文章:

  • Java垃圾收集机制Test1
  • css 设置 input 插入光标样式
  • OpenCV图片操作100例:从入门到精通指南(2)
  • java17 gc笔记
  • 论文阅读|汽车虚拟环绕音响系统设计与实现策略的比较研究
  • 新加坡国立大学基于多维度EHR数据实现细粒度患者队列建模,住院时间预测准确率提升16.3%
  • Android网络层架构:统一错误处理的问题分析到解决方案与设计实现
  • java中list.remove(item); // 直接移除会导致ConcurrentModificationException
  • Android ViewModel机制与底层原理详解
  • N8N与Dify:自动化与AI的完美搭配
  • 零基础Qt 5 安装教程
  • 【深度学习新浪潮】什么是蛋白质反向折叠模型?
  • cad_recognition 笔记
  • 前端规范化设计详解
  • ORA-600 kokiasg1故障分析---惜分飞
  • [1-01-01].第50节:泛型 - 泛型的使用
  • Python标准库 bisect 模块
  • 云原生技术与应用-容器技术技术入门与Docker环境部署
  • 【洛谷题单】--顺序结构(一)
  • OSPFv3与OSPFv2不同点
  • eslint扁平化配置
  • Linux守护进程
  • 【ES实战】ES客户端线程量分析
  • java-网络编程
  • Java中数组与链表的性能对比:查询与增删效率分析
  • RabbitMQ第二章(RocketMQ的五大工作模式)
  • 【Linux服务器】-安装ftp与sftp服务
  • 数据结构:数组:合并数组(Merging Arrays)
  • 20 道 Node.js 高频面试题
  • Codeforces Round 868 (Div. 2) D. Unique Palindromes(1900,构造)