侧边栏壁纸
博主头像
极简笔记博主等级

极简笔记,书写你的精彩程序人生!

  • 累计撰写 147 篇文章
  • 累计创建 24 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

Mysql的DATE_FORMAT(date,format)函数

极简笔记
2023-03-31 / 0 评论 / 0 点赞 / 448 阅读 / 1,195 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-03-31,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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:%syyyy-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)

本文转自 知乎,如有侵权,请联系删除。

0

评论区