Gaussdb获取日期及时间(二)

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,步长为1generate_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;


总结

项目中总结,仅供参考。

你可能感兴趣的:(gaussdb,nginx,https,运维)