generate_series(START,STOP,STEP) 表值函数 是 SQLite 源代码树中包含的一个 可加载扩展,并编译到 命令行 shell 中。generate_series() 表有一个可见的结果列,名为“value”,其中包含整数类型的值,行数由参数 START、STOP 和 STEP 决定。表的第一行值为 START。后续行以 STEP 为增量,直到不超过 STOP 的值。
generate_series() 表还有一些隐藏的列,名为“start”、“stop”和“step”,其值分别为 START、STOP 和 STEP 的有效值(提供或默认为值)。它还有一个 rowid,可以通过其常用的名称访问。
省略的参数将采用默认值。STEP 默认为 1。STOP 默认为 4294967295。从 3.37.0(2021-11-27)及更高版本开始,START 参数是必需的,如果省略 START 或其值为自引用或无法计算的值,则会引发错误。旧版本使用 0 作为 START 的默认值。可以通过使用 -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 ) ...
公用表表达式无需加载扩展即可工作。另一方面,扩展更容易编程且速度更快。
生成所有小于或等于 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