generate_series(START,STOP,STEP) 表值函數 是包含在 SQLite 原始碼樹中並編譯到 命令列外殼 中的 可載入擴充功能。generate_series() 表有一個可見的結果欄位,稱為「value」,其中包含整數值,而列數則由 START、STOP 和 STEP 參數決定。該表的第 1 列值為 START。後續列會以 STEP 為增量遞增,直到值不超過 STOP。
generate_series() 表有其他隱藏的欄位,稱為「start」、「stop」和「step」,其值分別為 START、STOP 和 STEP 的有效值(已提供或預設)。它也有 rowid,可透過其通常的名稱存取。
省略的參數會採用預設值。STEP 預設為 1。STOP 預設為 4294967295。從版本 3.37.0(2021-11-27)開始,START 參數是必要的,如果省略 START 或其值具有自參照或無法計算,則會產生錯誤。舊版本對 START 使用預設值 0。最近的程式碼可透過編譯 -DZERO_ARGUMENT_GENERATE_SERIES 取得舊版行為。
對於正向的 step 值,可以使用 遞迴共用表格表達式 模擬 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 ) ...
共用表格表達式可以在不載入擴充功能的情況下運作。另一方面,擴充功能較容易編寫程式,而且速度較快。
產生所有小於或等於 100 的 5 的倍數
SELECT value FROM generate_series(5,100,5);
產生 20 個隨機整數值
SELECT random() FROM generate_series(1,20);
找出所有帳戶號碼為 10000 到 20000 之間的 100 的偶數倍數的客戶名稱。
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));
此頁面最後修改於 2023-05-01 21:49:55 UTC