Табличная функция generate_series(START,STOP,STEP) это загружаемое расширение, включенное в исходное дерево SQLite и собранное в the оболочке командной строки. У таблицы generate_series() есть один видимый столбец результата, названный "value", содержащий целочисленные значения, и много строк, определенных параметрами START, STOP и STEP. У первой строки есть значение START. Последующие строки увеличиваются по STEP к значению не более STOP.
Таблица generate_series() имеет дополнительные, скрытые столбцы, названные "start", "stop" и "step", значения которых это действующие значения START, STOP и STEP как предусмотрено или по умолчанию. У этого также есть rowid, доступный под его обычными именами.
Опущенные параметры берут значения по умолчанию. По умолчанию STEP = 1. STOP = 4294967295. START требуется с версии 3.37.0 (2021-11-27) и позже и ошибка будет поднята, если START будет опущен или будет иметь самоссылочное или в других отношениях невычислимое значение. Более старые версии использовали по умолчанию START = 0. Устаревшее поведение может быть получено из недавнего кода, собрав с -DZERO_ARGUMENT_GENERATE_SERIES.
Таблица generate_series может быть моделирована для положительных значений шага, используя рекурсивное общее выражение. Если эти три параметра $start, $end и $step, то эквивалентное общее выражение:
WITH RECURSIVE generate_series(value) AS ( SELECT $start UNION ALL SELECT value+$step FROM generate_series WHERE value+$step<=$end ) ...
Общее выражение работает, не имея необходимости загружать расширение. С другой стороны, расширение легче и быстрее.
Произведите все множители от 5 до 100:
SELECT value FROM generate_series(5,100,5);
Произведите 20 случайных целочисленных значений:
SELECT random() FROM generate_series(1,20);
Найдите имя каждого клиента, номер счета которого число, кратное 100 между 10000 и 20000.
SELECT customer.name FROM customer, generate_series(10000,20000,100) WHERE customer.id=value; /* or */ SELECT name FROM customer WHERE id IN (SELECT value FROM generate_series(10000,20000,200));