Redshift查询当月订单报错:TO_CHAR函数不支持问题求助
Redshift当月订单查询报错解决方案
报错原因
该错误是由于Redshift在表查询场景中对NOW()函数的支持有限,同时通过TO_CHAR处理表列的写法不仅可能触发函数兼容性问题,还会导致无法利用列索引,查询性能较差。
解决方法
方法1:推荐使用日期范围查询(性能最优,无兼容性问题)
直接通过日期范围筛选当月订单,避免对表列执行函数运算,同时使用Redshift兼容的GETDATE()函数:
order_placed_at_ltz >= DATE_TRUNC('month', GETDATE()) AND order_placed_at_ltz < DATE_TRUNC('month', GETDATE()) + INTERVAL '1 month'
DATE_TRUNC('month', GETDATE())返回当前月份第一天的0点时间- 加上
INTERVAL '1 month'得到下一个月的第一天,用<而非<=可避免跨月边界的时间误差
方法2:替换NOW()为GETDATE()(兼容原写法逻辑)
如果坚持使用年月字符串匹配的方式,将NOW()替换为Redshift更兼容的GETDATE()即可:
TO_CHAR(order_placed_at_ltz, 'YYYY-MM') = TO_CHAR(GETDATE(), 'YYYY-MM')
注意:这种写法会对order_placed_at_ltz列做函数转换,无法利用该列上的索引,数据量较大时查询性能会受影响。
内容的提问来源于stack exchange,提问作者Omar Hitham
相关产品推荐
相关产品推荐

