![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Табличная функция
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, то эквивалентное общее выражение: Общее выражение работает, не имея необходимости
загружать расширение. С другой стороны, расширение легче и быстрее. Произведите все множители от 5 до 100: Произведите 20 случайных целочисленных значений: Найдите имя каждого клиента, номер счета которого
число, кратное 100 между 10000 и 20000.
Choose any three.
1. Обзор
1.1. Эквивалентное рекурсивное общее выражение
WITH RECURSIVE generate_series(value) AS (
SELECT $start UNION ALL SELECT value+$step FROM generate_series
WHERE value+$step<=$end
) ...
2. Примеры использования
SELECT value FROM generate_series(5,100,5);
SELECT random() FROM generate_series(1,20);
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));