今天有同事问到他现在开发的报表只想取昨天的数据,但提示器那里没有用到时间字段,怎么实现?我当时回想了一下当前RPD所有的时间变量,有很多时间变量应该可以满足要求,但实现却没有那么直观,网上百度了一下时间变量:发现有好多案例也有用到,觉得TIMESTAMPADD省了不少问题;
以下是我百度到的解释:
TIMESTAMPADD
此函数将指定的时间间隔数添加到指定的时间戳,并返回单个时间戳。
最简单的情况是,此函数根据时间间隔将指定的整数值与时间戳的适当组件相加。加一个星期时,会转换为加七天;而加一个季度时,会转换为加三个月。负的整数值会导致减去时间 (例如将时间倒推)。
指定的组件溢出 (例如超过 60 秒、24 小时、12 个月等) 时,会迫使在下一个组件中加上合适的时间量。例如,与时间戳的天组件相加时,此函数会考虑溢出,并且会计算特定月中的天数 (对于闰年,二月份会按 29 天计算)。
与时间戳的月组件相加时,此函数会验证生成的时间戳中的天组件是否有足够的天数。例如,将1 个月与 2000-05-31 相加不会生成 2000-06-31,因为六月份没有 31 号。此函数会将天组件减少到该月的最后一天,在本示例中即为 2000-06-30。
对于月组件为二月并且天组件为 29 (即闰年中二月的最后一天) 的时间戳,与该时间戳的年组件相加时,会发生类似的问题。如果生成的时间戳不是闰年,则该函数会将天组件减少到 28。
这些操作符合 Microsoft SQL Server 以及 Oracle 数据库的本机 OCI 接口的行为。
语法
TIMESTAMPADD(interval, intExpr, timestamp)
其中:
interval 是指定的时间间隔。有效值为:
· SQL_TSI_SECOND
· SQL_TSI_MINUTE
· SQL_TSI_HOUR
· SQL_TSI_DAY
· SQL_TSI_WEEK
· SQL_TSI_MONTH
· SQL_TSI_QUARTER
· SQL_TSI_YEAR
intExpr 是求值结果为整数值的任意表达式。
我在过滤器那里增加: TIMESTAMPADD(SQL_TSI_DAY, -1,@{current_date}) 这个语句即可实现;