sql - 动态日期变量的计算
问题描述
我使用 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 ......
我能做些什么来计算那个变量吗?
非常感谢,
亚历克斯
解决方案
您可以使用 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;
没有看到你的代码,这是我能做的最好的代表我在说什么......
推荐阅读
- url - 坏:现场数学混乱
- node.js - React 未使用正确的 REACT_APP_ 前缀检测我的 .env 文件
- asp.net-core-5.0 - 将 2 个模型传递给 ASP.NET Core 5 视图
- entity-framework - EF 框架代码优先 - 未生成正确的数据库脚本
- html - 将 R Markdown 文件转换为电子邮件
- python - 为什么这个 tkinter Menu 命令执行带有错误参数的函数?
- c++ - 为什么这里需要 std::launder ?
- r - 如何在ggplot ggppatern中将模式添加到堆叠和并排中
- ios - xCode:无法在颤振上安装“Runner”问题
- javascript - 在 HTML 和 Javascript/Jquery 中单击按钮后,如何执行修改 CSS 代码的函数?