前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySql时间处理函数的学习与实践

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

作者头像
捡田螺的小男孩
发布2020-04-15 18:05:37
1.2K0
发布2020-04-15 18:05:37
举报
文章被收录于专栏:捡田螺的小男孩

前言

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

DATE_ADD()

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

语法格式:

代码语言:javascript
复制
DATE_ADD(date,INTERVAL expr unit)
 

demo:

代码语言:javascript
复制
mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
 
 -> '2018-05-02'
 


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

DATE_SUB()

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

语法格式:

代码语言:javascript
复制
DATE_SUB(date,INTERVAL expr unit)
 

demo:

代码语言:javascript
复制
SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
 
 -> '2017-05-01'
 
//如果你查最近七天内的订单,可以这样:
 
select * from `order` where OrderDate>=DATE_SUB(NOW(),INTERVAL 7 DAY);
 

DATEDIFF()

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

语法格式:

代码语言:javascript
复制
DATEDIFF(expr1,expr2)
 

demo:

代码语言:javascript
复制
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
 
 -> 1
 
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
 
 -> -31
 
//如果你查最近30天内的订单,可以这样:
 
select * from `order` where DATEDIFF(NOW(),OrderDate)<=30;
 

DAYOFWEEK()

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

语法格式:

代码语言:javascript
复制
DAYOFWEEK(date)
 

demo:

代码语言:javascript
复制
mysql> SELECT DAYOFWEEK('2007-02-03');
 
 -> 7
 
//查询星期六下的订单
 
mysql> SELECT * FROM `order` WHERE DAYOFWEEK(OrderDate) =7;
 

MONTH()

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

语法格式:

代码语言:javascript
复制
MONTH(date)
 

demo:

代码语言:javascript
复制
mysql> SELECT MONTH('2019-11-24');
 
 -> 11
 
//查看今年11月份下的订单
 
SELECT * FROM `order` WHERE OrderDate>= '2019-01-01' and MONTH(OrderDate) =11 ;
 

YEAR()

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

语法格式:

代码语言:javascript
复制
YEAR(date)
 

demo:

代码语言:javascript
复制
mysql> SELECT YEAR('1987-01-01');
 
 -> 1987
 
// 查看2018年下的订单总数
 
SELECT count(*) FROM `order` WHERE Year(OrderDate) =2018 ;
 

HOUR()

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

语法格式:

代码语言:javascript
复制
HOUR(time)
 

demo:

代码语言:javascript
复制
mysql> SELECT HOUR('10:05:03');
 
 -> 10
 
// 查看2019年双11,0点下单量
 
SELECT count(*) FROM `order` WHERE  OrderDate BETWEEN '2019-11-11' and '2019-11-12' and HOUR(OrderDate) =0 ;
 

DATE_FORMAT()

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

语法格式:

代码语言:javascript
复制
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:

代码语言:javascript
复制
mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
 
 -> 'Sunday October 2009'
 
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
 
 -> '22:23:00'
 
// 统计2019年11月23号,每小时的下单量
 
select hour(OrderDate) as hour,count(*) as counts from `order` where
 
DATE_FORMAT(OrderDate,'%Y-%m-%d') = '2019-11-23' group by hour(OrderDate); 
 

EXTRACT()

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

语法格式:

代码语言:javascript
复制
EXTRACT(unit FROM date)
 

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

Unit值

-----

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

YEAR

...

demo:

代码语言:javascript
复制
mysql> SELECT EXTRACT(YEAR FROM '2019-07-02');
 
 -> 2019
 
mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');
 
 -> 201907
 
mysql> SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');
 
 -> 20102
 


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

NOW(),CURDATE(),CURTIME()

定义:

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

语法格式:

代码语言:javascript
复制

NOW()
 
CURDATE()
 
CURTIME()
 

demo:

DATE(),DAY(), TIME()

定义:

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

语法格式:

代码语言:javascript
复制
DATE(expr)
 
DAY(date)
 
TIME(expr)
 

demo:

代码语言:javascript
复制
mysql> SELECT DATE('2003-12-31 01:02:03');
 
 -> '2003-12-31'
 
mysql> select day('2017-02-03');
 
 ->3
 
mysql>  SELECT TIME('2003-12-31 01:02:03');
 
 -> '01:02:03'
 
mysql> SELECT TIME('2003-12-31 01:02:03.000123');
 
 -> '01:02:03.000123'
 

参考与感谢

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 捡田螺的小男孩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • DATE_ADD()
      • DATE_SUB()
        • DATEDIFF()
          • DAYOFWEEK()
            • MONTH()
              • YEAR()
                • HOUR()
                  • DATE_FORMAT()
                    • EXTRACT()
                      • NOW(),CURDATE(),CURTIME()
                        • DATE(),DAY(), TIME()
                        • 参考与感谢
                        相关产品与服务
                        云数据库 SQL Server
                        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档