Поделиться через


GENERATE_SERIES (Transact-SQL)

Область применения: SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL в хранилище Microsoft Fabric в Microsoft Fabric

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

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

GENERATE_SERIES Требуется, чтобы уровень совместимости был не менее 160. Если уровень совместимости меньше 160, ядро СУБД не может найти функциюGENERATE_SERIES.

Сведения об изменении уровня совместимости базы данных см. в статье Просмотр или изменение уровня совместимости базы данных.

Соглашения о синтаксисе Transact-SQL

Синтаксис

GENERATE_SERIES ( start , stop [ , step ] )

Аргументы

Начало

Первое значение в интервале. start указывается как переменная, литерал или скалярное выражение типа tinyint, smallint, int, bigint, decimal или numeric.

stop

Последнее значение в интервале. stop указывается как переменная, литерал или скалярное выражение типа tinyint, smallint, int, bigint, decimal или numeric. Ряд останавливается после того, как последнее созданное значение шага превышает значение stop.

Тип данных для остановки должен соответствовать типу данных для начала.

[ шаг ]

Указывает количество значений для постепенного увеличения или уменьшения между шагами в ряде. 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.

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

SELECT value
FROM GENERATE_SERIES(1, 10);

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

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

B. Создание ряда целых чисел в диапазоне от 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