国际版时区问题解决方案之:mysql函数

背景

数据库存的是东八区时间,需要根据用户时区时间按 天,周,月统计数据

分析
将用户时区时间转化为东八区查数据库,查到结果再转化为用户时区
但这里涉及到用户时间分组,若分组的维度是东八区,那根据东八区聚合会导致数据计算错误。需要按用户时区分组

想过一种方案是将 数据库关于统计相关表加上时区字段,每条记录根据24个时区生成24条记录。这样会产生大量冗余数据(原来1万条,现在24万),影响数据库性能
后来找到更优方案
使用mysql函数,将数据库中原来东八区数据计算为用户时区时间,根据计算后的时间查询

eg:

 select DATE_FORMAT(CONVERT_TZ(a.create_time,"+8:00",'-12:00'),'%Y-%m-%d %H') AS create_time,
        SUM(a.request_num) AS request_num,
        SUM(a.delivered_num) AS delivered_num,
        SUM(a.click_num) AS click_num,
        SUM(a.open_num) AS open_num
        from  `stat_every_hour` a
       WHERE a.create_time>='2020-04-09 20' and a.send_hour_timezone<='2020-04-10 19'
        GROUP BY create_time

CONVERT_TZ(a.create_time,"+8:00",#formatTimeZone#) 函数 第一个参数为转化字段,第二个参数为当前时区,第三个参数为目标时区。注意格式

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值