GENERATE_SERIES (Transact-SQL)

Применимо к:база данных Azure SQL SQL Server 2022 (16.x Управляемый экземпляр SQL Azure

Создает ряд чисел в пределах заданного интервала. Интервал и шаг между значениями рядов определяются пользователем.

Уровень совместимости 160

GENERATE_SERIES требует уровня совместимости не ниже 160. При уровне совместимости меньше 160 SQL Server не удастся найти функцию 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 ]

Указывает количество значений для постепенного увеличения или уменьшения между шагами в ряде. step является выражением типа tinyint, smallint, int, bigint, decimal или numeric. step может быть отрицательным или положительным, но не может быть равным нулю (0).

Этот аргумент является необязательным. Значение по умолчанию для step равно 1, если start меньше, чем stop. В противном случае значение по умолчанию равно 1, если start имеет значение больше, чем stop.

Если start имеет значение меньше, чем stop и для step указано отрицательное значение, или если значение start больше, чем stop и для step указано положительное значение, то возвращается пустой результирующий набор.

Типы возвращаемых данных

Возвращается единичная таблица столбцов, содержащая последовательность значений, в которой каждый следующий элемент отличается от предыдущего на step. Имя столбца — value. Выходные данные совпадают с типами start и stop.

Разрешения

Для GENERATE_SERIES разрешения не требуются. Однако пользователю нужно разрешение EXECUTE для базы данных и разрешение на запрос любых данных, используемых в качестве входных.

Примеры

В следующих примерах демонстрируется синтаксис вызова GENERATE_SERIES.

A. Создание ряда целых чисел в диапазоне от 1 до 10 с шагом приращения 1 (по умолчанию)

SELECT value
FROM GENERATE_SERIES(1, 10);

Вот результирующий набор.

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

Б. Создание ряда целых чисел в диапазоне от 1 до 50 с шагом приращения в 5

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

Вот результирующий набор.

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

В. Создание ряда десятичных чисел в диапазоне от 0,0 до 1,0 с шагом приращения в 0,1

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

См. также раздел