如何在 Firebird select 语句中创建从 1 到 100 的范围?
How to create range from 1 to 100 in Firebird select statement?
如何在 Firebird select 语句中创建从 1 到 100 的范围?
我已经找到了将字符串转换为列表的方法,但它对我不起作用,因为我需要生成更大的范围 How to input an array parameter of values to Firebird Stored Procedure?。
是否可以在不创建存储过程的情况下做这些事情?
一种方法是递归 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;
除了 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
然后您可以将其用作:
select outputvalue from generate_range(1, 100);
如 Gordon 所示,CTE 的优势在于它允许更大的范围,因为 Firebird CTE 的递归限制为 1024。
如何在 Firebird select 语句中创建从 1 到 100 的范围?
我已经找到了将字符串转换为列表的方法,但它对我不起作用,因为我需要生成更大的范围 How to input an array parameter of values to Firebird Stored Procedure?。
是否可以在不创建存储过程的情况下做这些事情?
一种方法是递归 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;
除了 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
然后您可以将其用作:
select outputvalue from generate_range(1, 100);
如 Gordon 所示,CTE 的优势在于它允许更大的范围,因为 Firebird CTE 的递归限制为 1024。