这个函数的bug可能是日期格式字符串写错了,应该是'YYYYMMdd'而不是'reate_time'。正确的函数应该是:
SELECT DATE_FORMAT(create_time, 'YYYYMMdd'), create_time;
首先,让我们分析一下SQL语句含义:
SELECT DATE_FORMAT(create_time,'YYYYMdd'), create_time FROM tem_ods_ord_order_info_i WHERE date(create_time)= '20231231' AND DATE_FORMAT(create_time ,'YYYYMdd') = '20231231'
这条 SQL 的目的是获取日期为 '20231231'
的记录,并按照创建时间降序排列。其中,DATE_FORMAT() 函数用于转换日期字符串的格式,将其转化为 'YYYYMMDD' 格式的日期。
然而,当我们在查询条件中加入 WHERE DATE_FORMAT(create_time , 'YYYYMdd')='20231231'
后,实际上我们只选择了那些原始日期也是 '20231231' 的记录。这就意味着,如果我们有一个日期不是 '20231231' 的记录,即使其创建时间为 '20231231',也会因为不符合筛选条件而不会出现在最终返回的结果集中。
所以,这种情况下,DATE_FORMAT()
函数并没有 bug 或者语法错误,只是功能上与预期不符。如果你想得到所有在指定日期创建的所有订单,你需要去掉这部分过滤条件,直接用 date=create_time
来匹配日期。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。