sql - 将当前值添加到未来日期 SQL
问题描述
我正在尝试加载未来日期的数据。我的情况是这样的,我有 2016 年、2017 年和 2018 年(直到 8 月)的数据。每年都有关联的当前值和“上一年同一天”值。数据汇总到月份。要求是我也加载未来日期的数据,即 2018 年 9 月至 2019 年 8 月使用“PYSD”值。例如,2017 年 9 月的“当前”值将是 2018 年 9 月的“PYSD”值,依此类推。当我尝试这个特定的逻辑时,我收到一个错误,指出“溢出”,我无法弄清楚是什么原因造成的。这只发生在我的 WHERE 子句中的第二个条件。我的 SELECT 子句将一个月的数据和输出汇总为 '08-01-2018' - 每月/每年将有一行。
SELECT
CAST(YEAR(DATEADD(dd, 364, CalendarDate)) AS VARCHAR(250))
+ '-' + RIGHT('00' + CAST(MONTH(DATEADD(dd, 364, CalendarDate)) AS VARCHAR(250)), 2)
+ '-' + '01' AS MonthPeriod
FROM
DateTable
WHERE
DATEADD(DD, 364, CalendarDate) > '08-31-2018'
AND DATEADD(DD, 364, CalendarDate) < '08-01-2019'
我的错误:
消息 517,级别 16,状态 3,第 1 行
向“日期”列添加值导致溢出。
此外,如果有更简单的方法,欢迎提出建议。我在 SQL Server 上。
TIA。
添加了示例数据:
解决方案
正如您在原始问题的答案之一中所述,您的最大日期是9999-12-31
这意味着任何一种都DATEADD(DD, 364, CalendarDate)
应该总是失败。如果您尝试检查 2018 年的日期并不重要,因为它必须先执行 dateadd,这会导致溢出。
为避免溢出,请以另一种方式添加日期 - 将实际 CalendarDate 与目标日期前一年进行比较。
CalendarDate > DATEADD(DD, -364, '08-31-2018')
要不就
CalendarDate > '2017-08-31'
我将剩下的你应该如何指定日期,或者它是否应该是 364,365,一个月的第一天等留在讨论的其余部分。
推荐阅读
- python - 绘制正弦函数
- c++ - 在不使用模板的情况下获取 std::array 引用
- button - 谷歌脚本自动检测包含按钮的单元格,并更改该单元格的背景?
- r - 根据 R 中的另一个数据框重命名列中的值
- android - 界面布局问题
- java - My loop with try catch is stuck in endless loop and it should prompt the user each time for an input
- swiftui-navigationlink - 我可以为我的 SwiftUI 列表中的一组指定单元格禁用 Navigationlink 吗?
- deep-learning - Julia Flux 中的等效数据集
- python-3.x - 在python中生成对应于工作日的日期
- java - 为什么在 for 循环内部声明有效,但在 for 循环外部声明为全局变量无效