通常我们在安装mysql实例时,都是使用默认的时区(中国大陆的服务器,通常就是GMT+8北京时区),随着业务的发展,如果业务实现了全球化,需要支持(多时区)按当地时间来汇总数据时,就会涉及到时区转换问题。

比如,有下面这张订单表(为简化问题,仅保留了id、下单时间2个字段) - 注:mysql实例为GMT+8时区

按北京时间汇总每天的订单记录数,sql语句如下:

SELECT
COUNT(0),DATE_FORMAT(order_time,'%Y-%m-%d')
FROM t_order
GROUP BY DATE_FORMAT(order_time,'%Y-%m-%d');

如果按GMT+1时区(即:欧洲地区)来统计的话,上面的数据就不对了,欧洲地区比北京时间早7小时,即:北京时间 2020-10-25 00:00:00,对应于欧洲当地时间 2020-10-24 17:00:00,把这几条记录的order_time转换一下,得到如下表格:

id order_time(GMT+8) order_time(GMT+1)
1 2020-10-25 01:00:01.000 2020-10-24 18:00:01.000
2 2020-10-25 02:00:01.000 2020-10-24 19:00:01.000
3 2020-10-25 20:00:01.000 2020-10-25 13:00:01.000
4 2020-10-25 23:00:01.000 2020-10-25 16:00:01.000
5 2020-10-26 02:00:01.000 2020-10-25 19:00:01.000
6 2020-10-26 05:00:01.000 2020-10-25 22:00:01.000
7 2020-10-26 11:00:01.000 2020-10-26 04:00:01.000
8 2020-10-26 15:00:01.000 2020-10-26 08:00:01.000
9 2020-10-26 20:00:01.000 2020-10-26 13:00:01.000

很明显,按欧洲当地时间来看,24号2条记录,25号4条记录,26号3条记录。幸好,mysql提供了一个CONVERT_TZ函数,可以用于时区转换,基本用法如下:

上面的语句,将GMT+8北京时间2020-10-25 00:00:00,转换成GMT+1欧洲时间2020-10-24 17:00:00,有了这个利器,最开始的sql可以改成:

SELECT
COUNT(0),DATE_FORMAT(CONVERT_TZ(order_time, '+08:00', '+01:00'),'%Y-%m-%d')
FROM t_order
GROUP BY DATE_FORMAT(CONVERT_TZ(order_time, '+08:00', '+01:00'),'%Y-%m-%d');

 

参考:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_convert-tz

mysql: 多时区的聚合统计的更多相关文章

  1. 关于MongoDB时间格式转换和时间段聚合统计的用法总结

    一 . 背景需求 在日常的业务需求中,我们往往会根据时间段来统计数据.例如,统计每小时的下单量:每天的库存变化,这类信息数据对运营管理很重要. 这类数据统计依赖于各个时间维度,年月日.时分秒都有可能. ...

  2. mysql数据库查询和聚合函数

    1.模糊查询 like % 表示多个任意字符 _ 表示任意一个字符 例如:查询黄姓同学 select * from student where name '黄%' select * from stud ...

  3. 用logstash 作数据的聚合统计

    用logstash 作数据的聚合统计 以spark-streaming 处理消费数据,统计日志经spark sql存储在mysql中 日志写入方式为append val wordsDataFrame ...

  4. mysql设置时区方法

    set global time_zone = '+2:00'; ##修改mysql全局时区 set time_zone = '+2:00'; ##修改当前会话时区 flush privileges; ...

  5. 修改MySQL的时区

    修改MySQL的时区,涉及参数time_zone 首先需要查看mysql的当前时区,用time_zone参数 ? 1 2 3 4 5 6 7 8 9 [html] mysql> show var ...

  6. MySQL修改时区的方法小结

    这篇文章主要介绍了MySQL修改时区的方法,总结分析了三种常见的MySQL时区修改技巧,包括命令行模式.配置文件方式及代码方式,需要的朋友可以参考下 方法一:通过mysql命令行模式下动态修改 1.1 ...

  7. MySql数据库时区异常,java.sql.SQLException: The server time zone value '?й???׼ʱ?' is unrecognized or represents more than one time zone.

    JDBC访问MySql异常 Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException ...

  8. [转]MySQL修改时区的方法小结

    本文转自:https://www.cnblogs.com/mracale/p/6064447.html 这篇文章主要介绍了MySQL修改时区的方法,总结分析了三种常见的MySQL时区修改技巧,包括命令 ...

  9. Mysql无法选取非聚合列

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 无法选取非聚合列. 更多讨论或者错误提交,也请移步. 1. 前言 最近升级博客,给文章页 ...

  10. 8.3Solr API使用(StatsComponent聚合统计)

    转载请出自出处:http://eksliang.iteye.com/blog/2169134 一.概述 Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min.max.a ...

随机推荐

  1. ORA-24247:网络访问被访问控制列表(ACL)拒绝器

    我在oracle 存储过程中发送http请求, 报错如下: ORA-29273:HTTP请求失败 ORA-06512:在"SYS.UTL HTTP",line 1527 ORA-2 ...

  2. 腾讯CodeBuddy,一款自带MCP市场的编程助手

    今天我发现了一个非常实用的腾讯云编程助手--CodeBuddy.之前它的名称是腾讯云代码助手,但现在已经正式更名为CodeBuddy,并且在更名的同时,其功能也得到了显著增强.今天,我们将详细了解一下 ...

  3. ansible实战-2023

    环境信息:cat /etc/ansible/hosts[webserver]192.168.31.18 ansible_ssh_user=root ansible_ssh_pass=123456 ht ...

  4. vue3 基础-传送门 teleport

    之前介绍了一波混入 mixin 和 自定义指令 directive 其基本作用就是为了在 vue 中实现代码的复用. 而本篇介绍的是 vue3 的一个新特性叫做传送门. 一听这个名字是不是就感觉特别科 ...

  5. AI法律助手:打造普惠法律服务的未来

    当法律服务遇见人工智能,普通人的维权之路将不再艰难 当法律服务成为奢侈品,AI或许是唯一出路 2025年的一个深夜,我刷着手机,一条新闻让我停下了滑动的手指: "某平台家装工人因合同纠纷讨薪 ...

  6. ODOO14里面qweb使用案例

    在ODOO里面中,通过QWeb来对模板进行渲染后加载到浏览器中,故作笔记以便于查询简介:Qweb被用作OpenERP的Web客户端模板引擎.它是一种基于XML的模板语言,同Genshi, Thymel ...

  7. HNU FPGA课设项目上手指南

    1.介绍 本文章旨在帮助HNU的同学更优雅的完成数电的FPGA课设(使用DE2-115),文章将涉及完成FPGA项目需要掌握的知识,资源分享以及一些关于完成项目的经验指导.大家快快搬好小板凳,准备发车 ...

  8. 理解 .NET 结构体字段的内存布局

    目录 前言 基本概念 结构体的默认字段布局 对齐 64 位系统与 32 位系统的对齐要求差异 默认字段布局中 对齐要求 与 偏移量 的关系 填充 包含引用类型字段的结构体的默认字段布局 用 Struc ...

  9. FFmpeg开发笔记(六十三)FFmpeg使用vvenc把视频转为H.266编码

    ​前面的两篇文章分别介绍了如何在Linux环境和Windows环境给FFmpeg集成H.266的编码器vvenc,接下来利用ffmpeg把视频文件转换为VVC格式,观察新生成的vvc视频能否正常播放. ...

  10. 破局AI问答专有名词检索迷局:分词期神器强势登场!

    有客户深度使用全文检索模式检索分段,反馈一些专有名词无法被检索到(例如把"小米手机"分成了"小米"和"手机"两个词,对检索结果造成较大干扰) ...