生成数字范围的最快方法
Fastest Way to Generate Range of Numbers
在两个值之间生成数字的最快方法是什么。
例如:
第一个值:6,000,000
第二个值:7,500,000
我必须像下面这样创建 1,500,000 行
6,000,001
6,000,002
.
.
7,500,000
不确定这是否是最快的,但这是我能想到的唯一方法:
with recursive numbers (nr) as (
select 6000000
from rdb$database
union all
select nr + 1
from numbers
where nr < 7500000
)
select *
from numbers;
更新: 正如 franbenz 在评论中指出的那样,Firebird 的递归深度限制为 1024,这显然无法更改。因此,虽然基本语法是正确的,但在尝试生成超过 1024 行时,上述内容将不起作用。
这对我有用:
create or alter procedure GET_INTEGER_RANGE (
INICIO integer,
FIN integer)
returns (
ACTUAL integer)
AS
begin
actual = inicio;
while (actual<=fin) do
begin
suspend;
actual = actual +1;
end
end
SELECT * FROM GET_INTEGER_RANGE(6000000,7500000);
在两个值之间生成数字的最快方法是什么。
例如:
第一个值:6,000,000
第二个值:7,500,000
我必须像下面这样创建 1,500,000 行
6,000,001
6,000,002
.
.
7,500,000
不确定这是否是最快的,但这是我能想到的唯一方法:
with recursive numbers (nr) as (
select 6000000
from rdb$database
union all
select nr + 1
from numbers
where nr < 7500000
)
select *
from numbers;
更新: 正如 franbenz 在评论中指出的那样,Firebird 的递归深度限制为 1024,这显然无法更改。因此,虽然基本语法是正确的,但在尝试生成超过 1024 行时,上述内容将不起作用。
这对我有用:
create or alter procedure GET_INTEGER_RANGE (
INICIO integer,
FIN integer)
returns (
ACTUAL integer)
AS
begin
actual = inicio;
while (actual<=fin) do
begin
suspend;
actual = actual +1;
end
end
SELECT * FROM GET_INTEGER_RANGE(6000000,7500000);