4

在两个值之间生成数字的最快方法是什么。

例如:
第一个值:6,000,000
第二个值:7,500,000

我必须创建 1,500,000 行,如下所示

 6,000,001
 6,000,002
 .
 .
 7,500,000
4

2 回答 2

2

这对我有用:

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);
于 2016-09-29T11:48:45.973 回答
1

不确定这是否是最快的,但这是我能想到的唯一方法:

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 行时,上述内容将不起作用。

于 2016-09-28T16:16:08.810 回答