mysql dateformat(MySQL的DATE_FORMAT函数的使用)
mysql dateformat
MySQL的DATE_FORMAT函数的使用假设某宝为鼓励大家双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)。
拿到这些数据,相信写推荐算法的同学就知道在哪个时间段给“触手怪刘大莉”同学推广告的效果最好了。
到此这篇关于MySQL的DATE_FORMAT函数的使用的文章就介绍到这了,更多相关MySQL DATE_FORMAT内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/qq_39390545/article/details/110846666
- windowsmysql服务在哪里(解决windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件的问题)
- mysql日志功能介绍(mysql日志系统的简单使用教程)
- 操作mysql的jdbc(JDBC连接的六步实例代码与mysql连接)
- mysql批量生成uuid(一种简单的ID生成策略: Mysql表生成全局唯一ID的实现)
- 合理设置服务mysql最大连接数(MySQL正确修改最大连接数的3种方案)
- mysql密码设置(mysql密码中有特殊字符&在命令行下登录的操作)
- mysql长连接释放和不释放的问题(解决MySQL存储时间出现不一致的问题)
- 软件测试常用mysql语句(MySQL压力测试工具Mysqlslap的使用)
- mysql常见的存储引擎(如何选择MySQL的存储引擎?)
- mysql8.0.19.0正确安装图解(MySQL 8.0.23 主要更新一览新特征解读)
- mysql流式查询(MySQL全面瓦解之查询的正则匹配详解)
- 如何用wampserver打开自己写的php(WampServer下安装多个版本的PHP、mysql、apache图文教程)
- mysqldump导入导出(MySQL官方导出工具mysqlpump的使用)
- mysqlcount使用方法(详解 MySQL中count函数的正确使用方法)
- mysql优化使用方法(详解Mysql函数调用优化)
- mysql分库分表视图(MySQL分库分表与分区的入门指南)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
热门推荐
- mysqltext与varchar区别(MySQL CHAR和VARCHAR该如何选择)
- html5如何控制内容(html5拖拽应用记录及注意点)
- canvas绘制流星(使用canvas实现黑客帝国数字雨效果)
- 阿里云ecs怎么配置环境(阿里云ECS实例中运行网站常见状态码的报错分析)
- python3 代码解读(Python3列表内置方法大全及示例代码小结)
- python中如何限制数字的个数(python 处理数字,把大于上限的数字置零实现方法)
- dedecms提示信息(DedeCms fckeditor编辑器空白无法显示的相关问题)
- php生命周期表(PHP中md5函数的用法讲解)
- word-break、word-wrap、white-space的用法
- vue路由有几种实现模式(Vue实现路由过渡动效的4种方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9