如何在Firebird select语句中创建1到100的范围?

Jas*_*ith 4 sql firebird firebird2.5

如何在Firebird select语句中创建1到100的范围?

我已经找到了将字符串转换为列表的方法,但它对我不起作用,因为我需要生成更大的范围如何向Firebird存储过程输入值的数组参数?.

是否可以在不创建存储过程的情况下执行此类操作?

Mar*_*eel 6

除了Gordon的建议,您还可以使用可选的存储过程来实现此目的:

create procedure generate_range(startvalue integer, endvalue integer)
    returns (outputvalue integer)
as
begin
    outputvalue = startvalue;
    suspend;

    while (outputvalue < endvalue) do
    begin
        outputvalue = outputvalue + 1;
        suspend;
    end
end
Run Code Online (Sandbox Code Playgroud)

然后您可以将其用作:

select outputvalue from generate_range(1, 100);
Run Code Online (Sandbox Code Playgroud)

Gordon所显示的CTE优势在于它允许更大的范围,因为Firebird CTE的递归限制为1024.


Gor*_*off 5

一种方法是递归CTE:

with recursive n as (
      select 1 as n
      from rdb$database
      union all
      select n.n + 1
      from n
      where n < 100
     )
select n.n
from n;
Run Code Online (Sandbox Code Playgroud)