Redshift中如何实现MySQL TO_DAYS()函数的等效功能
Redshift 适配MySQL TO_DAYS()天数差计算方案
MySQL的TO_DAYS()会返回日期距公元0年的累计天数,两个日期调用该函数做差,本质就是求两个日期的间隔天数。Redshift无此函数,AGE()返回的是时间间隔类型,无法直接做数值运算,直接替换会报错。
直接用Redshift原生DATEDIFF函数即可实现完全一致的逻辑,函数用法:DATEDIFF(day, 开始日期, 结束日期)
返回值为两个日期间隔的整数天数,和TO_DAYS(结束日期) - TO_DAYS(开始日期)的计算结果完全匹配。
改写后的可直接运行代码:
SELECT AVG(CASE WHEN s_status = 'finish' THEN DATEDIFF(day, date2, date1) ELSE NULL END) AS avg_time, SUM(CASE WHEN s_status = 'finish' AND DATEDIFF(day, date2, date1) <= 7 THEN 1 ELSE 0 END) AS one_week_time FROM 你的表名;
注意事项
- 如果
date1/date2是字符串格式存储的日期,需要先用TO_DATE(字段名, '日期格式串')转为DATE类型再传入计算,避免隐式转换出现异常结果。 - 注意
DATEDIFF的参数顺序:单位在前,起始日期在中间,结束日期在最后,顺序写反会得到负的天数差。
内容的提问来源于stack exchange,提问作者blue thunder
相关产品推荐
相关产品推荐

