如何在Teradata的CASE语句中编写datetime<=减去指定天数的条件
Teradata 时间范围过滤最优实现方案
你需要的datetime <= 往前减N天逻辑,以及扩展的「距今30天减去若干天」范围过滤,Teradata 下优先推荐以下可命中索引/分区的最优写法,避免无必要的性能损耗。
单边界过滤(以datetime <= 往前减5天为例)
优先选择不对过滤字段做运算的写法,保证可以命中字段上的索引或分区规则:
- 过滤字段为DATE类型时写法:
WHERE your_date_col <= CURRENT_DATE - INTERVAL '5' DAY - 过滤字段为TIMESTAMP类型时,若要包含5天前当天的所有时分秒数据:
若只需要过滤到5天前的0点,直接写WHERE your_timestamp_col <= CAST(CURRENT_DATE - INTERVAL '4' DAY AS TIMESTAMP) - INTERVAL '0.000001' SECONDWHERE your_timestamp_col <= CAST(CURRENT_DATE - INTERVAL '5' DAY AS TIMESTAMP)即可。
范围过滤(距今30天 ~ 往前减5天的区间)
如果需要提取「距今30天开始,到5天前结束」的区间数据,写法如下:
WHERE your_datetime_col BETWEEN CURRENT_DATE - INTERVAL '30' DAY AND CURRENT_DATE - INTERVAL '5' DAY
注意:TIMESTAMP类型的结束值调整逻辑和单边界场景一致。
性能避坑提示
- 禁止对过滤字段做函数转换,比如
WHERE CAST(your_datetime_col AS DATE) <= CURRENT_DATE - 5这种写法会导致分区裁剪、索引失效,大表查询时性能会差几个数量级。 - 以上推荐写法均可以直接触发Teradata的分区裁剪逻辑,是生产环境的最优实现。
内容的提问来源于stack exchange,提问作者Nithya Babu
相关产品推荐
相关产品推荐

