GENERATE_SERIES (Transact-SQL)

适用于:SQL Server 2022 (16.x) Azure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

在给定间隔内生成一系列数字。 序列值之间的间隔和步骤由用户定义。

兼容性级别 160

GENERATE_SERIES 要求兼容性级别至少为 160。 兼容性级别低于 160 时,数据库引擎将找不到 GENERATE_SERIES 函数。

若要更改数据库的兼容性级别,请参阅查看或更改数据库的兼容性级别

Transact-SQL 语法约定

语法

GENERATE_SERIES ( start , stop [ , step ] )

参数

start

间隔中的第一个值。 start 会指定为变量、文本或者类型为 tinyint、smallint、int、bigint、decimal 或 numeric 的标量表达式

stop

间隔中的最后一个值。 stop 会指定为变量、文本或者类型为 tinyint、smallint、int、bigint、decimal 或 numeric 的标量表达式。 最后一个生成的步骤值超过 stop 值后,序列将停止。

stop 的数据类型必须与 start 的数据类型匹配。

[ 步骤 ]

表明在系列中的步骤之间要增加或减少的值的数量。 step 是 tinyint、smallint、int、bigint、decimal 或 numeric 类型的表达式。 step 可以是负数或正值,但不能为零 (0)。

该参数可选。 如果 start 小于 stop,则 step 的默认值为 1,否则,如果 start 大于 stop,则默认值为 -1。

如果 start 小于 stop 并且为 step 指定了负值,或者如果 start 大于 stop 并且为 step指定了正值,会返回一个空结果集。

返回类型

返回一个包含一系列值的单列表,其中每个值与前一个值相差 step。 列的名称为 value。 输出与 start 和 stop 的类型相同。

权限

GENERATE_SERIES 不需要任何权限。 但是,用户需要数据库 EXECUTE 权限,以及查询用作输入的任何数据的权限。

示例

以下示例展示了调用 GENERATE_SERIES 的语法。

A. 以 1 为增量生成 1 到 10 之间的一系列整数值(默认)

SELECT value
FROM GENERATE_SERIES(1, 10);

下面是结果集:

value
-----------
1
2
3
4
5
6
7
8
9
10

B. 以 5 为增量生成 1 到 50 之间的一系列整数值

SELECT value
FROM GENERATE_SERIES(1, 50, 5);

下面是结果集。

value
-----------
1
6
11
16
21
26
31
36
41
46

°C 以 0.1 为增量生成 0.0 到 1.0 之间的一系列十进制值

DECLARE @start decimal(2, 1) = 0.0;
DECLARE @stop decimal(2, 1) = 1.0;
DECLARE @step decimal(2, 1) = 0.1;

SELECT value
FROM GENERATE_SERIES(@start, @stop, @step);

下面是结果集。

value
---------------------------------------
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0