说多了都是泪(╥╯^╰╥),仅此记录小明逝去的 2019 年。
经过
2019 年 12 月 29 号 周三
小明像往常一样,下班吃点夜宵,打会游戏,玩累了就去睡觉了🛌。又是充实且枯燥的一天。
2019 年 12 月 30 号 凌晨 3 点
小明被监控中心的预警电话吵醒了,【XX广告结算数据】为 0 。他赶紧爬起来查看原因
先看下眼调度任务,没有问题!✔️
数据源,有数据,也没问题啊!✔️
可是结果为什么没有数据呢?
最后发现,是下面这段 SQL 的问题:
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。
紧急修复
date_format(server_time,'yyyy-MM-dd') as p_dt
OK!
小明可以安心睡觉了。
迎接他的,是 0.1。