Psql 日期处理
1.获取最近n天的数据
//包括当天
where date_part('day',current_date - one_date) >= 0
and date_part('day',current_date - one_date) < n;
//不包括当天
where date_part('day',current_date - one_date) > 0
and date_part('day',current_date - one_date) <= n;
2.获取最近n周的数据(周一为一周之始)
//包括当周
where date_part('day',(date_trunc('week',current_date) + '1 week - 1 day'::interval)::date - one_date) >= 0
and date_part('day',(date_trunc('week',current_date) + '1 week - 1 day'::interval)::date - one_date) < n*7;
//不包括当周
where date_part('day',(date_trunc('week',current_date) + '1 week - 1 day'::interval)::date - one_date) >= 7
and date_part('day',(date_trunc('week',current_date) + '1 week - 1 day'::interval)::date - one_date) < (n+1)*7;
3.获取最近n月的数据
//包括当月
where date_part('year',age(current_date,one_date))*12 + date_part('month',age((date_trunc('month',current_date) + '1 month - 1 day'::interval)::date,one_date)) >= 0
and date_part('year',age(current_date,one_date))*12 + date_part('month',age((date_trunc('month',current_date) + '1 month - 1 day'::interval)::date,one_date)) < n;
//不包括当月
where date_part('year',age(current_date,one_date))*12 + date_part('month',age((date_trunc('month',current_date) + '1 month - 1 day'::interval)::date,one_date)) > 0
and date_part('year',age(current_date,one_date))*12 + date_part('month',age((date_trunc('month',current_date) + '1 month - 1 day'::interval)::date,one_date)) <= n;
4.获取最近n年的数据
//包括当年
where date_part('year',age((date_trunc('year',current) + '1 year - 1 day'::interval)::date,one_date)) >= 0
and date_part('year',age((date_trunc('year',current) + '1 year - 1 day'::interval)::date,one_date)) < n;
//不包括当年
where date_part('year',age((date_trunc('year',current) + '1 year - 1 day'::interval)::date,one_date)) > 0
and date_part('year',age((date_trunc('year',current) + '1 year - 1 day'::interval)::date,one_date)) <= n;
current_date 获取当前日期年月日
one_date 你想要计算的日期
date_part() 方法 获取日期中的年月日时分秒等
age() 方法 比较两个时间日期之间的差,结果为年月日
date_trunc() 方法 截取时间戳