1.当前时间往前推15分钟
mod(x,y)
----描述:
----x/y的余数(模)
----如果x是0,则返回y。
----返回值类型:与参数类型相同。
----mi:代表分钟数
select date_trunc('hour',sysdate) + case when mod(to_number(to_char(sysdate,'mi')),5) <> 0 then to_number(to_char(sysdate,'mi'))
- mod(to_number(to_char(sysdate,'mi')),5) else to_number(to_char(sysdate,'mi')) -mod(to_number(to_char(sysdate,'mi')),5) end /(60 * 24 ) -15/24/60 as data_date from dual;
2.取当前月份往前推12个月,每个月第一天
取当前月份往前推12个月,每个月第一天:
select mon::date
from generate_series(
--开始日期 date_trunc('month', now())::date 是当前月份第一天
date_trunc('month',sysdate)::date,
--结束日期 '-1y +1mon' 代表往前推一年,然后再往后加一个月
date_trunc('month', sysdate)::date+ '-1y +1mon'::interval,
-- step 位移步调 -1 months 代表往后倒推一个月
'-1 months'::interval
) mon
;
3.取当前月份往前推12个月,每个月最后一天
取当前月份往前推12个月,每个月最后一天:
select last_day(mon)::date
--开始日期 date_trunc('month', now())::date 是当前月份第一天
from generate_series(date_trunc('month',sysdate)::date,
--结束日期 '-1y +1mon' 代表往前推一年,然后再往后加一个月
date_trunc('month', sysdate)::date+ '-1y +1mon'::interval,
-- step 位移步调 -1 months 代表往后倒推一个月
'-1 months'::interval
) mon
;
该处主要使用generate_series函数,生成连续日期,再进行查询
函数 参数类型 返回类型 描述
generate_series(start,stop) int或bigint setof int或setof bigint(与参数类型相同)) 生成一个数值序列,从start到stop,步长为1 。
generate_series(start,stop,step) int或bigint setof int或setof bigint(与参数类型相同)) 生成一个数值序列,从start到stop,步长为step。
generate_series(start,stop,step) timestamp或timestamp with time zone setof timestamp或setof timestamp with time zone(与参数类型相同) 生成一个数值序列,从start到stop,步长为step。
理解generate_series这个函数,会解决很多小问题。
4.查询数据
利用该函数查询数据:
select
phone,
generate_series(trunc(sysdate -1)::TIMESTAMP,to_char(trunc(sysdate -1),'yyyy-mm-dd')|| ' 23:55:00','5 min')
from
test_cache;
总结
项目中总结,仅供参考。