假设我们具有以下输入参数:
任务如下:构建具有两列的表: date 和 dayname 。
因此,如果我们有date
= 2018-07-12
和period
= 3
,则表格应如下所示:
date |dayname
-------------------
2018-07-12|THURSDAY
2018-07-13|FRIDAY
2018-07-14|SATURDAY
我的解决方法是:
select add_days(date, -1) into previousDay from "DUMMY";
for i in 1..:period do
select add_days(previousDay, i) into nextDay from "DUMMY";
:result.insert((nextDay, dayname(nextDay));
end for;
但是我不喜欢循环。我假设如果要在结果表中放入更复杂的值,可能会导致性能问题。
实现目标的更好解决方案是什么?
答案 0 :(得分:1)
运行循环并逐个插入值无疑是完成任务的最慢的选择。
相反,您可以使用SAP HANA的时间序列功能。 像这样的声明
SELECT to_date(GENERATED_PERIOD_START)
FROM SERIES_GENERATE_TIMESTAMP('INTERVAL 1 DAY', '01.01.0001', '31.12.9999')
您可以生成具有给定间隔长度的有效日期的有界范围。
在我使用这种方法的测试中,花了一些时间从ca插入一组日期。 9分钟降至7秒...
如果您想要更多示例,我已经在here和here上写过。 在这些示例中,我什至包括使用系列表,这些表可以有效地压缩时间戳列的值。
答案 1 :(得分:0)
系列数据功能包括SERIES_GENERATE_DATE,它以日期数据格式返回一组值。因此,您不必费心将返回的数据转换为所需的日期格式。
这是示例代码
declare d int := 5;
declare dstart date := '01.01.2018';
SELECT generated_period_start FROM SERIES_GENERATE_DATE('INTERVAL 1 DAY', :dstart, add_days(:dstart, :d));