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功能...
我可以做些什么来对该变量进行计算吗?
非常感谢,
亚历克斯
答案 0 :(得分:0)
您可以使用substr分割输入内容,并将其转换为Quarter范围内的日期格式。然后,您只需要添加季度(在我的示例中显示为季度* 3个月:-1 * 3
和1 * 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;
在看不到您的代码的情况下,这是我能代表我在说什么的最好方法...