说多了都是泪(╥╯^╰╥),仅此记录小明逝去的 2019 年。

经过

2019 年 12 月 29 号 周三

小明像往常一样,下班吃点夜宵,打会游戏,玩累了就去睡觉了🛌。又是充实且枯燥的一天。

2019 年 12 月 30 号 凌晨 3 点

小明被监控中心的预警电话吵醒了,【XX广告结算数据】为 0 。他赶紧爬起来查看原因

先看下眼调度任务,没有问题!✔️

数据源,有数据,也没问题啊!✔️

可是结果为什么没有数据呢?

最后发现,是下面这段 SQL 的问题:

  1. date_format(server_time,'YYYY-MM-dd') as p_dt

数据在清洗的过程中 server_time 为 2019-12-29 00:00:00 到 2019-12-29 23:59:59 的日志,被转成了 2020-12-29 了。

通过查询资料,具体的愿意是这样的:大写的 Y 指的是 week year,也即是说,当前周所包含的年份的较大值。2019-12-29 这天是星期天,在老外看来是一周的开始(即2019/12/29到2020/01/04算完整的一周),这个周里既包含2019年也包容2020年,因此在YYYY格式下,这周里的任意一天输出都是2020。

当要格式化的日期time值为2019-12-29 00:00:00时,在YYYY-MM-dd HH:mm:ss格式下,MM-dd HH:mm:ss 对应的输出为12-29 00:00:00,这个是没问题的,而YYYY输出的不是2019,而是换成了2020,因此两个拼接到一起,就成了2020-12-29 00:00:00,引发了bug。

紧急修复

  1. date_format(server_time,'yyyy-MM-dd') as p_dt

OK!

小明可以安心睡觉了。

迎接他的,是 0.1。