在BI报表开发时,经常需要计算同比环比,需要用到月末日期,用数据库系统的日期函数操作需要在每处用到日期的地方都把函数写一遍,在某些特殊情形,函数会很复杂,甚至不能实现想要的结果。
比如在Teradata中的Addmonths函数,只计算了月份:
日期 | 增量值 | 结果 |
2015/01/01 | 1 | 2015/02/01 |
2015/01/31 | 1 | 2015/02/28 |
2015/02/28 | -1 | 2015/01/28 |
2015/03/31 | -1 | 2015/02/28 |
2015/02/28 | 0 | 2015/02/28 |
如表格所示,遇到月末的时候,不能统计整月的信息,常常不是想要的结果。
因此有必要在作业中加入变量,实现每月取月末的数据。
perl实现如下,简单测试,生产环境上线前请使用sprintf格式化一下。
#!/usr/bin/perl # 获取任意月份月末日期 # Liangwl # 2015/9/18 sub Add_Delta_Month { my ($date,$cnt) = @_; my $year = int($date/10000);