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() 方法 截取時間戳
參考資料