动态日期变量的计算

时间:2018-08-08 10:31:23

标签: sql oracle obiee

Im使用Oracle SQL平台,Im使用变量@Quarter来提示要查看的季度和相关数据。此变量基于格式为“ YYYY QQ”(例如“ 2018 Q2”)的列。

现在,传递该变量确实很容易,但是如何为该变量添加时间以获得下一个或上一个季度?

我尝试过:TIMESTAMPADD(SQL_TSI_QUARTER, -1, @QUARTER')

和发出的sql如下:

(TIMESTAMPADD(SQL_TSI_QUARTER, -1, '2017 Q 4')

不幸的是,我的变量没有适当的格式,只是“ 2017 Q 4”,所以没有时间戳...

我也尝试过:TIMESTAMPADD(SQL_TSI_QUARTER, -1, CAST('@QUARTER' AS DATE))

和发出的sql看起来:

(TIMESTAMPADD(SQL_TSI_QUARTER, -1, CAST('2017 Q 4' AS DATE)))

就像它甚至无法识别内部的CAST功能...

我可以做些什么来对该变量进行计算吗?

非常感谢,

亚历克斯

1 个答案:

答案 0 :(得分:0)

您可以使用substr分割输入内容,并将其转换为Quarter范围内的日期格式。然后,您只需要添加季度(在我的示例中显示为季度* 3个月:-1 * 31 * 3)即可获得之前/之后的季度。

with x as (select '2017 Q4' as input from dual)
select input,
    to_date(substr(input,1,4) || '-' || substr(input,7,1) * 3, 'yyyy-mm') as in_date_format,
    to_char(add_months(to_date(substr(input,1,4) || '-' || substr(input,7,1) * 3, 'yyyy-mm'), -1 * 3), 'yyyy "Q"q') as last_quarter,
    to_char(add_months(to_date(substr(input,1,4) || '-' || substr(input,7,1) * 3, 'yyyy-mm'), 1 * 3), 'yyyy "Q"q') as next_quarter
from x;

在看不到您的代码的情况下,这是我能代表我在说什么的最好方法...