Gaussdb获取日期及时间(二)

本文介绍了如何在SQL中进行时间计算,如获取当前时间往前推15分钟的时刻,并展示了使用generate_series函数生成连续日期序列,用于获取当前月份往前推12个月的每个月第一天和最后一天。这些技巧在数据查询和处理中非常实用。
摘要由CSDN通过智能技术生成

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;


总结

项目中总结,仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值