将PL/SQL日期转换SQL适配Redshift时遇函数报错求助
Redshift日期处理SQL适配解决方案
报错原因
Redshift中TRUNC(date, 'MM')的用法不被支持,该函数的重载版本无法识别传入的参数类型。Redshift推荐使用DATE_TRUNC函数实现按指定精度截断日期的需求。
修正后的SQL(贴合原PL/SQL逻辑)
将TRUNC(date, 'MM')替换为DATE_TRUNC('month', date),即可解决报错,同时保证逻辑与原PL/SQL一致:
SELECT DATEADD('day', 1.25, LAST_DAY(DATEADD('month', -1, DATE_TRUNC('month', TO_DATE('20230509', 'YYYYMMDD'))))) AS new_date;
执行结果:2023-05-01 06:00:00
简化版SQL(逻辑等价,更高效)
原PL/SQL的最终逻辑是获取输入日期所在月份的第一天并加上6小时(0.25天),可以直接简化为:
SELECT DATEADD('hour', 6, DATE_TRUNC('month', TO_DATE('20230509', 'YYYYMMDD'))) AS new_date;
该写法省略了多余的上月最后一天计算步骤,结果与原语句完全一致。
内容的提问来源于stack exchange,提问作者fesfefsfes fdsfsef
相关产品推荐
相关产品推荐

