首页 > 数据库 >MySql时间处理函数的学习与实践

MySql时间处理函数的学习与实践

时间:2022-10-14 10:09:02浏览次数:47  
标签:02 01 MySql 实践 OrderDate mysql DATE 处理函数 SELECT

前言

日常业务开发中,我们经常需要跟SQl的日期打交道,比如查询最近30天的订单,查询某一个月的订单量,统计某天每小时的下单量等等,于是整理了以下MySql时间处理函数。

DATE_ADD()

定义: 向日期添加指定的时间间隔。

语法格式:

  1. ​DATE_ADD(date,INTERVAL expr unit)​

demo:

  1. ​mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);​
  2. ​ -> '2018-05-02'​

  3. ​//如果你查最近七天内的订单,可以这样:​
  4. ​mysql> SELECT * FROM `order` WHERE OrderDate>=DATE_ADD(NOW(),INTERVAL -7 DAY);​

DATE_SUB()

定义: 从日期减去指定的时间间隔。

语法格式:

  1. ​DATE_SUB(date,INTERVAL expr unit)​

demo:

  1. ​SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);​
  2. ​ -> '2017-05-01'​
  3. ​//如果你查最近七天内的订单,可以这样:​
  4. ​select * from `order` where OrderDate>=DATE_SUB(NOW(),INTERVAL 7 DAY);​

DATEDIFF()

定义: 返回两个日期之间的天数

语法格式:

  1. ​DATEDIFF(expr1,expr2)​

demo:

  1. ​mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');​
  2. ​ -> 1​
  3. ​mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');​
  4. ​ -> -31​
  5. ​//如果你查最近30天内的订单,可以这样:​
  6. ​select * from `order` where DATEDIFF(NOW(),OrderDate)<=30;​

DAYOFWEEK()

定义: 表示返回日期是星期几,记住:星期天=1,星期一=2, ... 星期六=7

语法格式:

  1. ​DAYOFWEEK(date)​

demo:

  1. ​mysql> SELECT DAYOFWEEK('2007-02-03');​
  2. ​ -> 7​
  3. ​//查询星期六下的订单​
  4. ​mysql> SELECT * FROM `order` WHERE DAYOFWEEK(OrderDate) =7;​

MONTH()

定义: 返回date是当年的第几月,1月就返回1,... ,12月就返回12

语法格式:

  1. ​MONTH(date)​

demo:

  1. ​mysql> SELECT MONTH('2019-11-24');​
  2. ​ -> 11​
  3. ​//查看今年11月份下的订单​
  4. ​SELECT * FROM `order` WHERE OrderDate>= '2019-01-01' and MONTH(OrderDate) =11 ;​

YEAR()

定义: 返回date是年份,从1000到9999.

语法格式:

  1. ​YEAR(date)​

demo:

  1. ​mysql> SELECT YEAR('1987-01-01');​
  2. ​ -> 1987​
  3. ​// 查看2018年下的订单总数​
  4. ​SELECT count(*) FROM `order` WHERE Year(OrderDate) =2018 ;​

HOUR()

定义: 返回该date或者time的hour值,值范围(0-23).

语法格式:

  1. ​HOUR(time)​

demo:

  1. ​mysql> SELECT HOUR('10:05:03');​
  2. ​ -> 10​
  3. ​// 查看2019年双11,0点下单量​
  4. ​SELECT count(*) FROM `order` WHERE OrderDate BETWEEN '2019-11-11' and '2019-11-12' and HOUR(OrderDate) =0 ;​

DATE_FORMAT()

定义: 用于以不同的格式显示日期/时间数据。。

语法格式:

  1. ​DATE_FORMAT(date,format)​

date为对应的日期,fromat为输出格式。format的格式如下:

格式

描述

%a

缩写星期名

%b

缩写月名

%c

月,数值

%D

带有英文前缀的月中的天

%d

月的天,数值(00-31)

%e

月的天,数值(0-31)

%f

微秒

%H

小时 (00-23)

%h

小时 (01-12)

%i

分钟,数值(00-59)

%j

年的天 (001-366)

%M

月名

%m

月,数值(00-12)

%S

秒(00-59)

%T

时间, 24-小时 (hh:mm:ss)

%W

星期名

%Y

年,4 位

demo:

  1. ​mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');​
  2. ​ -> 'Sunday October 2009'​
  3. ​mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');​
  4. ​ -> '22:23:00'​
  5. ​// 统计2019年11月23号,每小时的下单量​
  6. ​select hour(OrderDate) as hour,count(*) as counts from `order` where​
  7. ​DATE_FORMAT(OrderDate,'%Y-%m-%d') = '2019-11-23' group by hour(OrderDate); ​

EXTRACT()

定义: 用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

语法格式:

  1. ​EXTRACT(unit FROM date)​

date 参数是合法的日期表达式。unit 参数可以是下列的值:

Unit值

-----

SECOND


MINUTE


HOUR


DAY


WEEK


MONTH


YEAR


...


demo:

  1. ​mysql> SELECT EXTRACT(YEAR FROM '2019-07-02');​
  2. ​ -> 2019​
  3. ​mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');​
  4. ​ -> 201907​
  5. ​mysql> SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');​
  6. ​ -> 20102​

  7. ​//查询订单的年月日​
  8. ​mysql>SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,​
  9. ​ ->EXTRACT(MONTH FROM OrderDate) AS OrderMonth,​
  10. ​ ->EXTRACT(DAY FROM OrderDate) AS OrderDay​
  11. ​ ->FROM `order`​

NOW(),CURDATE(),CURTIME()

定义:

  • NOW()返回当前的日期和时间
  • CURDATE() 返回当前的日期
  • CURTIME() 返回当前的时间

语法格式:

  1. ​NOW()​
  2. ​CURDATE()​
  3. ​CURTIME()​

demo:

MySql时间处理函数的学习与实践_mysql

DATE(),DAY(), TIME()

定义:

  • DATE() 提取日期或日期/时间表达式的日期部分
  • DAY() 返回当月的几号 (1-31)
  • TIME() 提取日期或日期/时间表达式的时间部分

语法格式:

  1. ​DATE(expr)​
  2. ​DAY(date)​
  3. ​TIME(expr)​

demo:

  1. ​mysql> SELECT DATE('2003-12-31 01:02:03');​
  2. ​ -> '2003-12-31'​
  3. ​mysql> select day('2017-02-03');​
  4. ​ ->3​
  5. ​mysql> SELECT TIME('2003-12-31 01:02:03');​
  6. ​ -> '01:02:03'​
  7. ​mysql> SELECT TIME('2003-12-31 01:02:03.000123');​
  8. ​ -> '01:02:03.000123'​

参考与感谢

  • MySql官网
  • SQL Date 函数(https://www.w3school.com.cn/sql/sql_dates.asp)

个人公众号

MySql时间处理函数的学习与实践_sql_02

  • 如果你是个爱学习的好孩子,可以关注我公众号,一起学习讨论。
  • 如果你觉得本文有哪些不正确的地方,可以评论,也可以关注我公众号,私聊我,大家一起学习进步哈。


标签:02,01,MySql,实践,OrderDate,mysql,DATE,处理函数,SELECT
From: https://blog.51cto.com/u_15659694/5755202

相关文章

  • MySQL日志15连问
    前言大家好,我是田螺哥。金九银十已经来了,整理了15道经典MySQL日志面试题,希望对大家有帮助。1.redolog是什么?为什么需要redolog?redolog是什么呢?redolog是重做日......
  • MySQL 中的 “My” 是什么意思?
    前两天,我跟一个面试官聊天,发现一个普遍现象,不少候选人,对数据库的认知,还处在比较基础的阶段,以为会写“增删改查”、做表关联就足够了,那些工作中经常出现的问题,却支支吾吾答不......
  • 美团二面:Redis与MySQL双写一致性如何保证?
    前言四月份的时候,有位好朋友去美团面试。他说,被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨......
  • Windows 安装 MySQL 5.7 x64 位
    下载地址:https://downloads.mysql.com/archives/installer/安装网站上只有x86没有x64位,之前下了x64的zip包,配置比较麻烦,其实这个x86包里面,已经包含了x64的包......
  • linux mysql定时备份存异地服务器
    参考资料帖子:https://blog.51cto.com/u_1472521/5108597https://blog.csdn.net/zhou920786312/article/details/123354503https://zhuanlan.zhihu.com/p/201086165http......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够......
  • 实验5:开源控制器实践——POX
    一、实验目的1.能够理解POX控制器的工作原理;2.通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;3.能够运用POX控制器编写自定义网......
  • 继承与多态4 在实践中理解把握复杂的知识
    总结(1):子类父类拥有同名的方法时……当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是......