如何在Netezza SQL中获取当前日期对应的上一季度第一天?
在Netezza SQL中获取上一季度的第一天
Netezza确实没有像SQL Server那样的datediff(quarter)函数,但可以通过extract、add_months和to_date这些内置函数组合实现需求,这里提供两种可行方案:
方案一:通过季度判断拼接日期
直接根据当前季度计算上一季度的年份和起始月份,拼接成日期字符串后转换为日期类型:
SELECT TO_DATE( CASE WHEN extract(quarter FROM current_date) = 1 THEN (extract(year FROM current_date) - 1) || '-10-01' WHEN extract(quarter FROM current_date) = 2 THEN extract(year FROM current_date) || '-01-01' WHEN extract(quarter FROM current_date) = 3 THEN extract(year FROM current_date) || '-04-01' ELSE extract(year FROM current_date) || '-07-01' END, 'YYYY-MM-DD' ) AS first_day_of_last_quarter;
方案二:基于当前季度第一天减3个月
先计算当前季度的第一天,再通过add_months函数减去3个月得到上一季度的第一天,逻辑更简洁通用:
SELECT ADD_MONTHS( TO_DATE( extract(year FROM current_date) || '-' || ((extract(quarter FROM current_date) - 1) * 3 + 1) || '-01', 'YYYY-MM-DD' ), -3 ) AS first_day_of_last_quarter;
逻辑说明
- 用
extract(quarter FROM current_date)获取当前日期所在季度,extract(year FROM current_date)获取年份 - 方案二中,
((extract(quarter FROM current_date) - 1) * 3 + 1)用于计算当前季度的起始月份:Q1对应1,Q2对应4,Q3对应7,Q4对应10 add_months(date, -3)实现日期往前推3个月,自动处理跨年情况(比如Q1的上一季度会自动切换到上一年的Q4)
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

