MySQL的DATE_FORMAT函数的使用
作者:_陈哈哈 发布时间:2024-01-18 09:52:28
假设某宝为鼓励大家双12买买买,奖励双十一那天订单最多的两位用户:分别是用户1:“剁手皇帝陈哈哈” 和 用户2:“触手怪刘大莉” 一人一万元;
需求1:让你通过MySQL订单表,统计一下双11那天,这两位每小时的购买订单成交数;你会怎么写这条SQL呢?
记得几年前我刚接触MySQl,年少轻狂,在得知不用考虑效率的情况下,我写了个接口循环二十四遍,发送24条SQL去查(捂脸),由于那个接口,被技术经理嘲讽~~表示他写的SQL比我吃的米都多。虽然我们山东人基本不吃米饭,但我还是羞愧不已。。
然后经理通过调用一个DATE_FORMAT函数分组查询处理一下,就ok了,效率是我的几十倍吧。从那时起,我暗自计划要深入研究SQL技巧。
第二天,由于和朋友开黑打了两把王者,计划延后了几年~
在MySQL中对于处理时间字段,有专门封装的DATE_FORMAT函数,可以说,DATE_FORMAT函数可以基本满足任何时间字段的处理需求。
DATE_FORMAT(date,format) 函数
参数解析:
1、date:代表具体时间字段,也可以为now()查询当前时间;
2、format:DATE_FORMAT将传来的Date类型数据转为自己需要的格式,如%Y-%m-%d %H:%i:%s会将传来的Time数据转为"yyyy-MM-dd HH:mm:ss"格式
%Y-%m-%d %H:%i:%s 与 yyyy-MM-dd HH:mm:ss 相对应,也是最常用的格式,这里举几个简单的栗子如下;
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); -- 结果:2020-12-07 22:18:58
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i'); -- 结果:2020-12-07 22:18
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H'); -- 结果:2020-12-07 22
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d'); -- 结果:2020-12-07
SELECT DATE_FORMAT(NOW(),'%H:%i:%s'); -- 结果:22:18:58
SELECT DATE_FORMAT(NOW(),'%H'); -- 结果:22
对于上面的需求1,用DATE_FORMAT函数的查询方式如下:
SELECT name as '用户名',DATE_FORMAT(createTime,'%Y-%m-%d %H') as '时间/小时',count(*) as '订单量' from t_order
where DATE_FORMAT(createTime,'%Y-%m-%d') = '2020-11-11'
GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d %H');
查询结果:
mysql> SELECT name as '用户名',DATE_FORMAT(createTime,'%Y-%m-%d %H') as '时间/小时',count(*) as '订单量' from t_order where DATE_FORMAT(createTime,'%Y-%m-%d') = '2020-11-11' GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d %H');
+------------------+---------------+-----------+
| 用户名 | 时间/小时 | 订单量 |
+------------------+---------------+-----------+
| 剁手皇帝陈哈哈 | 2020-11-11 00 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 01 | 10 |
| 剁手皇帝陈哈哈 | 2020-11-11 02 | 6 |
| 剁手皇帝陈哈哈 | 2020-11-11 03 | 3 |
| 剁手皇帝陈哈哈 | 2020-11-11 04 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 05 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 06 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 07 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 08 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 09 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 10 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 11 | 0 |
| 剁手皇帝陈哈哈 | 2020-11-11 12 | 12 |
| 剁手皇帝陈哈哈 | 2020-11-11 13 | 6 |
| 剁手皇帝陈哈哈 | 2020-11-11 14 | 3 |
| 剁手皇帝陈哈哈 | 2020-11-11 15 | 7 |
| 剁手皇帝陈哈哈 | 2020-11-11 16 | 2 |
| 剁手皇帝陈哈哈 | 2020-11-11 17 | 3 |
| 剁手皇帝陈哈哈 | 2020-11-11 18 | 11 |
| 剁手皇帝陈哈哈 | 2020-11-11 19 | 2 |
| 剁手皇帝陈哈哈 | 2020-11-11 20 | 1 |
| 剁手皇帝陈哈哈 | 2020-11-11 21 | 3 |
| 剁手皇帝陈哈哈 | 2020-11-11 22 | 2 |
| 剁手皇帝陈哈哈 | 2020-11-11 23 | 0 |
+------------------+---------------+-----------+
24 rows in set (0.00 sec)
这里的GROUP BY DATE_FORMAT(createTime,'%Y-%m-%d %H')代表的是“年月日 + 小时”合在一起为单位,具体到的是某天的小时;
当然,也可以写成以下两种形式,都是按小时来划分,但是…:
1、GROUP BY DATE_FORMAT(createTime,'%H')
2、GROUP BY HOUR(createTime)
需要注意的是,当where条件指定了某一天时,这三种的作用是相同的,但如果where条件没指定某一天,就会大不相同,我们来看看查询结果;
SELECT name as '用户名',DATE_FORMAT(createTime,'%H') as '时间/小时',count(*) as '订单量' from t_order
GROUP BY DATE_FORMAT(createTime,'%H');
查询结果
mysql> SELECT name as '用户名',DATE_FORMAT(createTime,'%H') as '时间/小时',count(*) as '订单量' from t_order GROUP BY DATE_FORMAT(createTime,'%H');
+-----------------+---------------+-----------+
| 用户名 | 时间/小时 | 订单量 |
+-----------------+---------------+-----------+
| 触手怪刘大莉 | 00 | 11 |
| 触手怪刘大莉 | 01 | 302 |
| 触手怪刘大莉 | 02 | 277 |
| 触手怪刘大莉 | 03 | 122 |
| 触手怪刘大莉 | 04 | 6 |
| 触手怪刘大莉 | 05 | 11 |
| 触手怪刘大莉 | 06 | 0 |
| 触手怪刘大莉 | 07 | 0 |
| 触手怪刘大莉 | 08 | 1 |
| 触手怪刘大莉 | 09 | 4 |
| 触手怪刘大莉 | 10 | 5 |
| 触手怪刘大莉 | 11 | 92 |
| 触手怪刘大莉 | 12 | 1937 |
| 触手怪刘大莉 | 13 | 1602 |
| 触手怪刘大莉 | 14 | 108 |
| 触手怪刘大莉 | 15 | 78 |
| 触手怪刘大莉 | 16 | 110 |
| 触手怪刘大莉 | 17 | 108 |
| 触手怪刘大莉 | 18 | 138 |
| 触手怪刘大莉 | 19 | 66 |
| 触手怪刘大莉 | 20 | 44 |
| 触手怪刘大莉 | 21 | 59 |
| 触手怪刘大莉 | 22 | 21 |
| 触手怪刘大莉 | 23 | 8 |
+-----------------+---------------+-----------+
24 rows in set (0.01 sec)
通过查询结果可以看出,查出的数据是用户历史所有的订单数在各小时的分布情况,DATE_FORMAT(createTime,'%H')代表的是是任意天的小时,也等价于GROUP BY HOUR(createTime)。
拿到这些数据,相信写推荐算法的同学就知道在哪个时间段给“触手怪刘大莉”同学推广告的效果最好了。
来源:https://blog.csdn.net/qq_39390545/article/details/110846666


猜你喜欢
- 01、文件操作文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟的概念/接口用户/应用程序可以通过文件将数据永久保存在硬盘中用户/应用程序
- 本文实例讲述了django实现分页的方法。分享给大家供大家参考。具体如下:Python代码如下:#!/usr/bin/env python#
- 本文实例讲述了JavaScript实现解析INI文件内容的方法。分享给大家供大家参考,具体如下:.ini 是Initialization F
- fromkeys()方法类似于列表的浅拷贝首先用该方法创建一个字典dict_ = dict.fromkeys(('a',
- riginal_Data因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理。Import_D
- 此货很干,跟上脚步!!!Cookiecookie是什么东西?小饼干?能吃吗?简单来说就是你第一次用账号密码访问服务器服务器在你本机硬盘上设置
- 本文实例讲述了Python装饰器。分享给大家供大家参考。具体分析如下:这是在Python学习小组上介绍的内容,现学现卖、多练习是好的学习方式
- 前言最近参加了大创项目,题目涉及到计算机视觉,学姐发了个修正图像的博客链接,于是打算用这个题目入门OpenCV。分析问题照片中的PPT区域总
- 刚在网上查了一圈,好家伙,全都是那一篇文章,而且用的pycharm是老版本的,下边介绍的是pycharm2019专业版的,直接切入正题:(1
- 1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PH
- matplotlib绘图库模块安装pip install matplotlib导入pyplot子模块import matplotlib.py
- 本文实例讲述了Python设计模式之组合模式原理与用法。分享给大家供大家参考,具体如下:组合模式(Composite Pattern):将对
- 本文给大家分享了好几种复制表结构、表数据的示例介绍,具体详情请看下文吧。1、复制表结构及数据到新表CREATE TABLE 新表SELECT
- 什么是MyCAT一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群
- 1、场景import { observe } from "./reactive";import Watcher from
- 示例:《电影类型分类》获取数据来源电影名称打斗次数接吻次数电影类型California Man3104RomanceHe's Not
- 1. 获取abi文件合约的接口在remix工具中编译合约后,会有一个abi,复制然后新建一个xx.abi文件,把赋值的粘贴到里面注意:代码变
- 这篇文章主要介绍了python如何基于redis实现ip代理池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 实例如下: $(document).on("click",".admin-side-friend",
- 前言数据清洗是一项复杂且繁琐(kubi)的工作,同时也是整个数据分析过程中最为重要的环节。有人说一个分析项目80%的时间都是在清洗数据,这听