postgresql获取当前或某一时间段的年月日

最近写代码遇到关于获取某一时间年月日的需求,特此写一篇文章便于自己记录

1.获取当前时间

select now();                    
--返回:2022-12-07 15:53:15.881711+08

select current_date;      
--返回:2022-12-07

select current_timestamp;
--返回:2022-12-07 15:56:28.729581+08

select current_time;
--返回:15:56:50.155444+08

2.获取当前月份的第一天

select date_trunc('month',current_date)::DATE;
--返回:2022-12-01

3.根据当前日期获取次日、次月、前年

select (current_date + INTERVAL '1 day')::DATE;
--根据当前日期获取次日,返回:2022-12-08
select date_trunc('month',(current_date + INTERVAL '1 month'))::DATE;
--根据当前日期获取次月,返回:2023-01-01
select (current_date - INTERVAL '2 YEAR')::DATE;
--根据当前日期获取前年,返回:2020-12-07

如果要获取“周”的周期的时间 把day、month或year改成week即可,2 year那里加不加s都可以执行。

4.根据第三步的内容,我们还可以获取上一月/年的最后一天

select (date_trunc('month',current_date) - interval'1 day')::DATE;
--首先用date_trunc函数获取当月的第一天的日期,然后再倒退一天,返回:2022-11-30
select (date_trunc('year',current_date) - interval'1 day')::DATE;
--同上,首先用date_trunc函数获取今年的第一天的日期,然后再倒退一天,返回:2021-12-31

这里注意如果我们要获取上一年前一个月的第一天日期或最后一天日期,即我现在的时间是2022-12-07,我想获取2021年11月第一天的日期或最后一天,写法应该是

select (date_trunc('year',current_date) - interval'2 month')::DATE;
--从当前日期2022-12-07获取2021年11月第一天的日期,返回:2021-11-01
select ((date_trunc('year',current_date) - interval'1 month')-INTERVAL '1 day')::DATE;
--从当前日期2022-12-07获取2021年11月最后一天的日期,返回:2021-11-30
--不知道有没有更简易的方法,希望学习下

5.根据第四步的思路,我们可以获取当月最后一天的日期

select (date_trunc('month',current_date) + interval'1 month - 1 day')::DATE;
--首先用date_trunc函数获取当月的第一天的日期,接着再加一个月,最后再减一天,返回:2022-12-31

6.虽然前几步最后都转成了日期格式,但也可以截取任意日期的时分秒

SELECT substr(to_char(CURRENT_TIMESTAMP, 'yyyy-mm-dd hh24:mi:ss'),12,8);
--返回:16:19:34

7.从某一时间开始循环返回一段周期(举例:从2022年1月1日循环返回到2023年1月1日)

SELECT generate_series(
    '2022-01-01',
    '2023-01-01',
    '1 day'::interval --day可以改成week、month、year
)::DATE AS generated_date;



SELECT generate_series(
    '2023-01-01 00:00:00',
    '2023-01-01 23:00:00',
    '1 hour'::interval --hour可以改成minute、second
)::timestamp AS generated_time;

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值