请求将SQL Server月累计日期CASE语句转换为Redshift语法
转换SQL Server MTD日期计算语句到Redshift语法
先理清楚你原SQL Server语句的逻辑:当weekenddate是当月前7天时,取上月第一天作为MTD开始日期;否则取当月第一天。接下来把它转换成Redshift兼容的语法:
直接语法转换版本
Redshift没有day()函数,需要用extract(day FROM ...)获取日期的日部分;同时dateadd的日期单位参数要从dd换成day。转换后的语句如下:
CASE WHEN extract(day FROM weekenddate) <= 7 THEN dateadd(day, -extract(day FROM dateadd(day, -extract(day FROM weekenddate), weekenddate)) + 1, dateadd(day, -extract(day FROM weekenddate), weekenddate)) ELSE dateadd(day, -extract(day FROM weekenddate) + 1, weekenddate) END AS MTDStartDateTY
更简洁高效的版本
Redshift支持date_trunc函数,可以直接截断日期到月份,能大幅简化逻辑,可读性和性能都更好:
CASE WHEN extract(day FROM weekenddate) <= 7 THEN date_trunc('month', dateadd(month, -1, weekenddate)) ELSE date_trunc('month', weekenddate) END AS MTDStartDateTY
这个简化版本和原语句逻辑完全一致,但写法更清晰,Redshift处理date_trunc的效率也比嵌套dateadd更高,推荐使用这个版本。
内容的提问来源于stack exchange,提问作者Deepthi
相关产品推荐
相关产品推荐

