【实例】POSTGRE SQL如何用age函数实现两个日期之间的差值计算用法及代码示例

【实例】POSTGRE SQL如何用age函数实现两个日期之间的差值计算用法及代码示例

工作中遇到需要计算两个日期之间的月份差值、天数差值,百度到的众多内容自己通过实践整理后,将最终的计算结果分享给大家

例:
用到的函数:age(end_date,start_date)
age函数常用来计算年龄,计算两个日期之间的差值
这里current_date是当前系统时间,为:

select current_date

系统返回账期为:

2023-10-20

既当前日期为:2023-10-20

第二个参数账期后::timestamp是将该值强制转换为timestamp类型,才可用做计算:

select age(current_date , '2022-11-04'::timestamp)

返回结果为:

{"hours":0,"seconds":0.0,"months":11,"minutes":0,"days":16,"type":"interval","value":"0 years 11 mons 16 days 0 hours 0 mins 0.00 secs","years":0}

这里会将年份之间的差值、月份之间、天数之间对应差值都对应计算出来

当我们将其转换为varchar格式后:

select cast(age(current_date , '2022-11-04'::timestamp) as varchar)

返回结果会变为:
会直接返回有参数的值,既账期差值:

11 mons 16 days

看到这里你是否已经明白该如何计算两个账期之间的差值了呢?如果只想要相差的年份、月份、天数中的一种的话,可以加入extract函数,单独提取出年份差值,月份差值,或者天数差值来

例:


select 
 extract(year from  age(current_date , '2022-03-04'::timestamp)) as interval_years  -- 间隔的年数
,extract(month from  age(current_date , '2022-03-04'::timestamp)) as interval_month  -- 间隔的月数
,extract(day from  age(current_date , '2022-03-04'::timestamp)) as interval_day -- 间隔的天数

返回结果为:

interval_years	1.0
interval_month	7.0
interval_day	16.0

大家可以自己计算一下,
2023-10-20 到 2022-03-04 的差值 是不是就是差了1年7个月16天?

想全部转换为天数或者月数的话,自己再计算一下就好了,这里一个月按30天,一年按365天计算了:

select 
 interval_years*365+interval_month*30+interval_day as interval_all_days  -- 间隔的总天数计算
,interval_years*12+interval_month as interval_all_months  -- 间隔的总天数计算
from 
(
select 
 extract(year from  age(current_date , '2022-03-04'::timestamp)) as interval_years  -- 间隔的年数
,extract(month from  age(current_date , '2022-03-04'::timestamp)) as interval_month  -- 间隔的月数
,extract(day from  age(current_date , '2022-03-04'::timestamp)) as interval_day -- 间隔的天数
)a 

返回结果为:

interval_all_days	591.0
interval_all_months	19.0

这两个日期按天数计算共差了591天,按月份来看差了19个月,你学会了吗?

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值