问题描述
收到一个需求,需要计算当月每周的数据汇总,这样就需要划分每天是当月的第几周,有可能的情况就是一号是周日,二号是周一,这样一号就是第一周,二号就是第二周,比如2023-01-01就是周日以此类推。
先上解决代码:
week(date_column,1) - week(concat(substring(date_column,1,7),'-01'),1)+1
week()可以计算当天是本年第几周,但是有缺陷。当周跨年时,如果有四天或者以上在今年则这几天返回为1,如果不是则返回为0.
WEEK(date, mode);
WEEK函数接受两个参数:
date是要获取周数的日期。
mode是一个可选参数,用于确定周数计算的逻辑。它允许您指定本周是从星期一还是星期日开始,返回的周数应在0到52之间或0到53之间。
本题思路大概就是根据week()来计算每天属于第几周然后减去当天当月第一天的周数再加一就可以得到每天属于当月第几周了。
substring(date_column,1,7) --切割字符串取出年月
concat(substring(date_column,1,7),'-01') --拼接-01
date_column --日期字段
现在我们试着问一下chatgpt这题怎么解:
我们先给定角色,然后告诉他需求,最后告诉他注意week()跨年问题
这段代码对函数使用有问题,我们把报错信息发给他,让它再改一版。
还是有报错
老问题
没有报错了,但是数据不对。
后面又试了几次他还是不能兼顾。
结论:chatgpt3.5还是不能处理一些比较冷门的复杂sql,原因有三
1.容易混淆各个语法相同函数的用法。
2.对于热门问题还是能给出相对正确的答案,但是如果是一个比较冷门的问题或者是一个新问题,那他就无能为力了(chatgpt4.0或许可以)
3.当处理一些复杂逻辑的sql时,我们不能很快速的判断它给出的sql是否有问题,需要的时间成本较高。