09 时间函数:时间类数据,MySQL是怎么处理的?

09-时间函数:时间类数据,MySQL是怎么处理的?

获取日期时间数据中部分信息的函数

超市经营者希望通过实际的销售数据,了解到一天当中什么时间段卖得好,什么时间段卖的不好,以此根据不同时间的销售情况,合理安排商品陈列和人员促销,以实现收益最大化。

销售单头表 demo.transactionhead

销售单头表 demo.transactionhead

销售单明细表 demo.transactiondetails

销售单明细表 demo.transactiondetails

商品信息表 demo.goodsmaster

商品信息表 demo.goodsmaster

销售单明细表通过流水编号与销售单头表关联,其中流水编号是外键。

首先分析一下“统计一天中每小时的销售数量和销售金额”

统计一天中每小时的销售情况,先把销售数据按照小时进行分组统计。

解决问题的关键是把交易时间的小时部分提取出来。使用EXTRACT()和HOUR()函数。

EXTRACT(type FROM date)表示从日期时间date中抽取type指定部分

1
2
3
4
5
6
7
8
9
10
SELECT 
EXTRACT(HOUR FROM b.transdate) AS 时段,
SUM(a.quantity) AS 数量,
SUM(a.salesvalue) AS 金额
FROM
demo.transactiondetails a
JOIN
demo.transactionhead b ON (a.transactionid = b.transactionid)
GROUP BY EXTRACT(HOUR FROM b.transdate)
ORDER BY EXTRACT(HOUR FROM b.transdate);

image-20230321133159958

查询过程:

  • 先从交易时间中抽取出小时信息
  • 按照交易时间进行分组
  • 按照分组来统计数量和金额
  • 按照时间进行排序

使用HOUR()函数直接提取时间

1
2
3
4
5
6
7
8
9
10
SELECT 
HOUR(b.transdate) AS 时段,
SUM(a.quantity) AS 数量,
SUM(a.salesvalue) AS 金额
FROM
demo.transactiondetails a
JOIN
demo.transactionhead b ON (a.transactionid = b.transactionid)
GROUP BY HOUR(b.transdate)
ORDER BY HOUR(b.transdate);

image-20230321134013491

支持的函数

1
2
3
4
5
6
YEAR(date):获取 date 中的年。
MONTH(date):获取 date 中的月。
DAY(date):获取 date 中的日。
HOUR(date):获取 date 中的小时。
MINUTE(date):获取 date 中的分。
SECOND(date):获取 date 中的秒。

计算日期时间的函数

  • DATE_ADD(date,INTERVAL表达式type):
  • LAST_DAY(date):

第一步:

1
SELECT DATE_ADD('2020-12-10',INTERVAL -1 YEAR);

image-20230321135506213


09 时间函数:时间类数据,MySQL是怎么处理的?
http://example.com/2023/03/13/09-时间函数:时间类数据,MySQL是怎么处理的?/
Author
WYX
Posted on
March 13, 2023
Licensed under