在HANA开发中,经常会遇到一些业务数据不连续,但是在最终输出的时候要求连续展示,尽管对应的业务数据为空。这时生成序列数据是非常重要的一步。HANA提供了多种用于生成不同类型序列的函数,以下是一些常用的序列生成函数以及它们的详细用法。

数值

小数

series_generate_decimal(start, increment, count)

生成一个包含指定数量十进制数的序列,从指定的起始值开始,按指定的增量递增。返回一个具有以下字段的表:

  • VALUE: 序列中的每个数值。

示例:

1
SELECT * FROM SERIES_GENERATE_DECIMAL(1.5, 0, 10);

结果:

1
2
3
4
5
VALUE
1.5
1.5
1.5
......

整数

series_generate_integer(start, increment, count)

生成一个包含指定数量的整数序列,从指定的起始值开始,按指定的增量递增。返回一个具有以下字段的表:

  • VALUE: 序列中的每个整数。

示例:

1
SELECT * FROM SERIES_GENERATE_INTEGER(1, 0, 10);

结果:

1
2
3
4
5
VALUE
1
1
1
....

日期

日期

series_generate_date(interval, start, end)

生成一个日期序列,从指定的起始日期开始,按指定的间隔递增,直到达到指定的结束日期。返回一个具有以下字段的表:

  • VALUE: 序列中的每个日期。

参数:

  • interval: 时间间隔。必须是一个字符串,表示间隔的大小和单位,如’interval 1 day’或’interval 2 month’。
  • start: 开始日期。必须是一个日期或日期时间字符串。
  • end: 结束日期。必须是一个日期或日期时间字符串。

示例:

1
SELECT * FROM SERIES_GENERATE_DATE('interval 1 day', '2020-08-25', '2020-09-03');

结果:

1
2
3
4
5
6
VALUE
2020-08-25
2020-08-26
2020-08-27
2020-08-28
....

时间

series_generate_timestamp(interval, start, end)

生成一个时间戳序列,从指定的起始时间戳开始,按指定的间隔递增,直到达到指定的结束时间戳。返回一个具有以下字段的表:

  • VALUE: 序列中的每个时间戳。

参数:

  • interval: 时间间隔。必须是一个字符串,表示间隔的大小和单位,如’interval 1 hour’或’interval 30 minute’。
  • start: 开始时间戳。必须是一个时间戳字符串。
  • end: 结束时间戳。必须是一个时间戳字符串。

示例:

1
SELECT * FROM SERIES_GENERATE_TIMESTAMP('interval 1 hour', '2020-08-25 13:54:30', '2020-08-25 15:54:30');

结果:

1
2
3
4
VALUE
2020-08-25 13:54:30.0000000
2020-08-25 14:54:30.0000000
2020-08-25 15:54:30.0000000

生成每周的日期序列

1
SELECT * FROM SERIES_GENERATE_DATE('interval 1 week', '2020-08-25', '2020-09-15');

结果:

1
2
3
4
5
VALUE
2020-08-25
2020-09-01
2020-09-08
2020-09-15

生成每季度的日期序列

1
SELECT * FROM SERIES_GENERATE_DATE('interval 3 month', '2020-01-01', '2021-01-01');

结果:

1
2
3
4
5
6
VALUE
2020-01-01
2020-04-01
2020-07-01
2020-10-01
2021-01-01

带有时区的时间

series_generate_timestamp_tz(interval, start, end, timezone)

生成一个带有时区信息的时间戳序列,从指定的起始时间戳开始,按指定的间隔递增,直到达到指定的结束时间戳。返回一个具有以下字段的表:

  • VALUE: 序列中的每个时间戳。

参数:

  • interval: 时间间隔。必须是一个字符串,表示间隔的大小和单位,如’interval 1 hour’或’interval 30 minute’。
  • start: 开始时间戳。必须是一个时间戳字符串。
  • end: 结束时间戳。必须是一个时间戳字符串。
  • timezone: 时区。必须是一个字符串,表示时区的偏移量,如’+05:30’表示印度标准时间。

示例:

1
SELECT * FROM SERIES_GENERATE_TIMESTAMP_TZ('interval 1 hour', '2020-08-25 13:54:30', '2020-08-25 15:54:30', '+08:00');

结果:

1
2
3
4
VALUE
2020-08-25 13:54:30.0000000 +08:00
2020-08-25 14:54:30.0000000 +08:00
2020-08-25 15:54:30.0000000 +08:00

这些是SAP HANA中的一些常用的序列生成函数和它们的用法。通过使用这些函数,可以方便地生成各种类型的序列数。
后续如果有其他更多的序列生成函数,我会继续更新这篇文章。