如何将Oracle SQL中取上一年7月至当年6月的过滤条件转为Teradata SQL?
Teradata 适配的日期过滤SQL
最优实现(日期函数方式,避免字符串拼接)
SELECT * FROM C.Data DM WHERE DM.Dateofdata BETWEEN ADD_MONTHS(TRUNC(CURRENT_DATE, 'YYYY'), -6) -- 上一年7月1日 AND ADD_MONTHS(TRUNC(CURRENT_DATE, 'YYYY'), 6) - INTERVAL '1' DAY; -- 当年6月30日
与原Oracle逻辑对齐的字符串拼接方式
如果偏好和原代码逻辑一致的字符串拼接写法,Teradata兼容版本如下:
SELECT * FROM C.Data DM WHERE DM.Dateofdata BETWEEN TO_DATE('01-07-' || EXTRACT(YEAR FROM CURRENT_DATE) - 1, 'DD-MM-YYYY') AND TO_DATE('30-06-' || EXTRACT(YEAR FROM CURRENT_DATE), 'DD-MM-YYYY');
关键差异说明
- Teradata中用
CURRENT_DATE替代Oracle的SysDate,用于获取当前系统日期 - 日期函数方式更高效且规避格式转换风险:
TRUNC(CURRENT_DATE, 'YYYY')提取当年1月1日的日期值ADD_MONTHS(..., -6)将当年1月1日往前推6个月,得到上一年7月1日ADD_MONTHS(..., 6) - INTERVAL '1' DAY将当年1月1日往后推6个月再减1天,精准得到当年6月30日
内容的提问来源于stack exchange,提问作者Jt R
相关产品推荐
相关产品推荐

