Oracle如何根据一个日期计算同比环比的日期

本文介绍在SQL中如何处理日期,包括字符串转日期、获取月份及年份的第一天、计算两个日期间的差值等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iamlaosong文

在写统计查询的SQL语句时,经常会碰到根据一个查询日期推演其它日期的问题,如同比、环比等。

1、字符串转换成日期:to_date('2016-6-16', 'yyyy-mm-dd')

2、统计当月累计需要当月第一天:trunc(to_date('2016-6-16', 'yyyy-mm-dd'),'mm'),'mm'也可以写成'month'

3、统计当年累计需要当年第一天:trunc(to_date('2016-6-16', 'yyyy-mm-dd'),'yy'),'yy'也可以写成'year'

4、有时需要当月最后一天:last_day(to_date('2016-6-16', 'yyyy-mm-dd'))

5、环比需要用到上月同期:add_months(to_date('2016-6-16', 'yyyy-mm-dd'),-1)

6、同比需要用到去年同:add_months(to_date('2016-6-16', 'yyyy-mm-dd'),-12)

7、组合-去年同第一天:trunc(add_months(to_date('2016-6-16', 'yyyy-mm-dd'),-12),'mm')

8、两个日期之间的天数:to_date('2016-6-16', 'yyyy-mm-dd')-to_date('2016-6-10', 'yyyy-mm-dd')

9、两个日期之间的月数:months_between(to_date('2016-6-16', 'yyyy-mm-dd'),to_date('2016-1-16', 'yyyy-mm-dd')),注意,两个日期如果日数不同,则会出现小数,如months_between(to_date('2016-6-16', 'yyyy-mm-dd'),to_date('2016-5-6', 'yyyy-mm-dd'))的结果是1.32258064516129,其中的小数部分是多余的天数除以31的结果。

比较欣慰的是当日期是当月的最后一天时,计算同比或者环比日期时,系统会自动调整为该月最后一天。例如,add_months(to_date('2016-4-30', 'yyyy-mm-dd'),-1)的结果是2016-3-31,这个结果对于按月统计是很有好处的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值