【问题标题】:What is the fastest way to populate table with dates after certain day?在某天之后用日期填充表格的最快方法是什么?
【发布时间】:2018-07-12 14:26:04
【问题描述】:

假设我们有以下输入参数:

  • 日期 [日期]
  • 句号 [整数]

任务如下:构建具有两列的表:datedayname

所以,如果我们有 date = 2018-07-12period = 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;

但我不喜欢循环。我假设如果我想将更复杂的值放入结果表中,则性能可能会出现问题。

实现目标的更好解决方案是什么?

【问题讨论】:

标签: sql hana hana-sql-script


【解决方案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 秒...

如果您想要更多示例,我前段时间已经写过herehere。 在这些示例中,我什至使用了系列表,这些表允许有效压缩时间戳列值。

【讨论】:

  • 是的,我可以说这看起来很不错,唯一的问题是我需要在程序中使用它。在这种情况下,我使用同义词,然后出现数据库错误:不支持功能:不允许字段或表别名作为表函数的输入。有什么想法吗?
  • 如果您使用 XSA,那么它可能只是缺少表函数的同义词。为该问题创建一个新问题,并包含您的代码和 HANA 版本,我会说。
  • 谢谢,Lars,我会的。
【解决方案2】:

系列数据函数包括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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多