摸个鱼的功夫,就学会了MySQL的DATE_FORMAT函数
小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里
假设某宝为鼓励大家双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_orderGROUP 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)
。
拿到这些数据,相信写推荐算法的同学就知道在哪个时间段给“触手怪刘大莉”同学推广告的效果最好了。
附、一张有故事的照片(十二)
上世纪80年代,日本围棋正处于巅峰
在世界棋坛坐稳头把交椅
此时中国围棋,只有聂卫平一人
而他一夫当关,以一己之力挽大厦于将倾。
1988年,在中日围棋擂台赛11连胜的聂卫平被授予“棋圣”称号
摸个鱼的功夫,就学会了MySQL的DATE_FORMAT函数相关推荐
- 摸个鱼的功夫,搞懂双亲委派机制
大家好,我是陈哈哈,北漂儿五年~ 一路走来,随着对技术的不断探索,发现不会的也愈来愈多.相信不少朋友和我一样,日积月累才是最有效的学习方式!想起高三时同桌小姐姐的座右铭:只有沉下去,才能浮上来 ...
- 摸倚天鱼文章推荐系列 - 19-04-07
欢迎来到摸倚天鱼系列, 以休闲态度, 推硬核文章, 探索亚文化~ 摸鱼 One-Minute 问: 把抖音头条等软件卸载了, 能缓解刷手机症状吗? 答: 能, 但是会显著增加玩电脑时长~ 文章推荐 代 ...
- 开发累了就摸个鱼,帮我修改一下中式英语
上学时喜欢帮同桌找错,一个英文句子如果能找到5处错误,心里就美滋滋的.如今轮到自己写技术文档,面对满篇的中式英语却有心无力.好心的网友,如果开发累了,就摸个鱼
- 1015葛芮杉李睿莹|1-圖像处理与人脸识别的结合应用。群里贴图2-每组学会一个新的ffmpeg的命令,用于视音频处理(自学:看文档,搜索等)3-每组学会2个图像处理的函数,贴图
#人脸识别+裁切+粘贴 import cv2 import numpy as np import pandas as pd import os from matplotlib import pyplo ...
- 摸个鱼(算最大捕捞量)
渔夫在一片海上捕鱼(摸鱼),每天只能撒一次网,为了不让老板发现自己每天只撒一次网,他要尽可能让这一次的捕捞量最大,正所谓数量不够,质量来凑.渔夫所在的海,可以简约看成一片NxN的海,而网(即捕捞面积) ...
- 脑袋空空时,浅浅的摸一下鱼
目录 观影访谈节目 纪录片 央视出品 综艺 读书 成长类 自律类 未知类别 学英语 电影 动画片 TED演讲 美剧 电影 职场格局|审美提升 恋爱清醒| 治愈心灵| 未知类别 观影 访谈节目 圆桌派. ...
- mysql 默认事务隔离级别_上个厕所的功夫,搞懂MySQL事务隔离级别
"隔离级别" 出于MySQL四大特性(ACID)中的"I",也就是隔离性.目的是实现数据.事务一致性"C". MySQL在多线程并发场景下, ...
- 上个厕所的功夫,搞懂MySQL事务隔离级别,Java学习视频百度云盘
| 14 | 朱志鹏 | 男 | 25 | 技术1部 | 5000 | 看小说 | | 19 | 李昂 | 男 | 27 | 技术1部 | 7000 | 看片儿 | ±-±----------±--- ...
- 上个厕所的功夫,搞懂MySQL事务隔离级别
"隔离级别" 出于MySQL四大特性(ACID)中的"I",也就是隔离性.目的是实现数据.事务一致性"C". MySQL在多线程并发场景下, ...
最新文章
- AI校招程序员最高薪酬曝光!腾讯80万年薪领跑,还送北京户口
- css布局详解(一)——盒模型
- 计算机视觉与深度学习 | 基于MATLAB的Vibe算法消除鬼影(代码版)
- 常用正则表达式总结(js与C#对照)
- 【Zookeeper】编程实战之Zookeeper分布式锁实现秒杀
- 【 批量爬取下载geo.datav.aliyun.com下地图的json文 】
- nginx .conf
- Mysql 求时间 between 昨天 and 上个月的今天 等时间函数
- 更改JENKINS主目录
- linux里终端安转视频播放器的操作及显示
- Java中字符串的拼接和转义
- 2022抖音日活用户超8亿,旅游商家如何从抖音获客?
- Unity3d报错及解决办法总结
- 了解卡尔曼滤波器2--最优状态估计
- Winows笔记本设置合上盖子不休眠
- Excel如何冻结窗口
- WordCount 官方源码解读及工程代码
- 统计学简介之十——样本量的确定
- private 关键字
- 这一次,彻底搞懂useEffect
热门文章
- 进程和线程的几种通信方式
- 鸡年关于鸡的一些歇后语
- dn什么意思_DN是啥意思
- mybatis(三) XML映射器之select、update、delete、insert标签
- Java Web --HTML(尚硅谷2022版Javaweb)
- 【Java写的碰碰球游戏(2) 】
- 构建docker镜像时ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: network error
- 有哪些你一打开,就令你惊讶的网站?
- 炫酷的生日快乐网页 【附带源码】
- 我在赶集网的两个月(数据挖掘、竞情分析、产品、团购、运营、电话销售)