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,这个结果对于按月统计是很有好处的。