首页 > 解决方案 > 动态日期变量的计算

问题描述

我使用 Oracle SQL 平台,我使用变量 @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 ......

我能做些什么来计算那个变量吗?

非常感谢,

亚历克斯

标签: sqloracleobiee

解决方案


您可以使用 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;

没有看到你的代码,这是我能做的最好的代表我在说什么......


推荐阅读