Sql 如何生成斐波那契级数

Sql 如何生成斐波那契级数,sql,sql-server,Sql,Sql Server,如何在sql中生成斐波那契级数 我需要生成斐波那契级数011235581321。。。N 我用C代码很容易做到这一点,我需要用Sql 用于生成序列中的前10个数字 DECLARE @NoOne INT, @NoTwo INT DECLARE @FibonacciTable TABLE (Number INT NOT NULL) --Insert first two numbers 0 and 1 INSERT @FibonacciTable (Number) SELECT 0 UNION ALL

如何在sql中生成斐波那契级数

我需要生成斐波那契级数011235581321。。。N


我用C代码很容易做到这一点,我需要用Sql

用于生成序列中的前10个数字

DECLARE @NoOne INT,  @NoTwo INT
DECLARE @FibonacciTable TABLE (Number INT NOT NULL)
--Insert first two numbers 0 and 1
INSERT @FibonacciTable (Number) SELECT 0 UNION ALL SELECT 1
SELECT @NoOne = 0, @NoTwo = 1

WHILE (SELECT COUNT(*) FROM @FibonacciTable) < 10
BEGIN
    INSERT @FibonacciTable (Number) VALUES(@NoOne + @NoTwo)
    SELECT @NoTwo = @NoOne + @NoTwo, @NoOne = @NoTwo - @NoOne
END
SELECT * FROM @FibonacciTable   
GO

这用于生成序列中的前10个数字

DECLARE @NoOne INT,  @NoTwo INT
DECLARE @FibonacciTable TABLE (Number INT NOT NULL)
--Insert first two numbers 0 and 1
INSERT @FibonacciTable (Number) SELECT 0 UNION ALL SELECT 1
SELECT @NoOne = 0, @NoTwo = 1

WHILE (SELECT COUNT(*) FROM @FibonacciTable) < 10
BEGIN
    INSERT @FibonacciTable (Number) VALUES(@NoOne + @NoTwo)
    SELECT @NoTwo = @NoOne + @NoTwo, @NoOne = @NoTwo - @NoOne
END
SELECT * FROM @FibonacciTable   
GO
请尝试:

SELECT 0  AS fib_number UNION ALL
SELECT
    FLOOR(POWER(( 1 + SQRT(5) ) / 2.0, number) / SQRT(5) + 0.5)
FROM master..spt_values
WHERE TYPE = 'p' AND number BETWEEN 1 AND 70
请尝试:

SELECT 0  AS fib_number UNION ALL
SELECT
    FLOOR(POWER(( 1 + SQRT(5) ) / 2.0, number) / SQRT(5) + 0.5)
FROM master..spt_values
WHERE TYPE = 'p' AND number BETWEEN 1 AND 70
试试这个:-

 Declare @Fib int = 5
 ;with cte as
 (
   Select 0 as Previous,1 as Next ,0 as Level 
   union all
   Select Next,Next + Previous,Level +1 from cte 
   where Level +1 <@Fib
 )
 Select Previous as FibonacciSeries from cte
试试这个:-

 Declare @Fib int = 5
 ;with cte as
 (
   Select 0 as Previous,1 as Next ,0 as Level 
   union all
   Select Next,Next + Previous,Level +1 from cte 
   where Level +1 <@Fib
 )
 Select Previous as FibonacciSeries from cte
尝试以下简单查询:

1用于逐行、单列、多行的结果

WITH Fibonacci (PrevN, N) AS
(
     SELECT 0, 1
     UNION ALL
     SELECT N, PrevN + N
     FROM Fibonacci
     WHERE N < 1000000000
)
SELECT PrevN as Fibo
     FROM Fibonacci
     OPTION (MAXRECURSION 0);
产出1:

2对于结果,在单个单元格中仅显示一行逗号分隔符

WITH Fibonacci (PrevN, N) AS
(
 SELECT 0, 1
    UNION ALL
    SELECT N, PrevN + N
    FROM Fibonacci
    WHERE N < 1000000000
)
SELECT Substring(
    (SELECT cast(', ' as varchar(max)) + cast(PrevN as varchar(max)
);
FROM Fibonacci
FOR XML PATH('')),3,10000000) AS list
产出2:

试试这个简单的查询:

1用于逐行、单列、多行的结果

WITH Fibonacci (PrevN, N) AS
(
     SELECT 0, 1
     UNION ALL
     SELECT N, PrevN + N
     FROM Fibonacci
     WHERE N < 1000000000
)
SELECT PrevN as Fibo
     FROM Fibonacci
     OPTION (MAXRECURSION 0);
产出1:

2对于结果,在单个单元格中仅显示一行逗号分隔符

WITH Fibonacci (PrevN, N) AS
(
 SELECT 0, 1
    UNION ALL
    SELECT N, PrevN + N
    FROM Fibonacci
    WHERE N < 1000000000
)
SELECT Substring(
    (SELECT cast(', ' as varchar(max)) + cast(PrevN as varchar(max)
);
FROM Fibonacci
FOR XML PATH('')),3,10000000) AS list
产出2: 试试这个

declare @a int
declare @b int
declare @c int
Declare @i int

set @a=0
set @b=1
set @i=0
set @c=0
Print 'Fibonacci Series'
print @a
print @b
while @i<10 
Begin
set @c=@a+@b
print @c
set @i=@i+1
set @a=@b
set @b=@c
end
0 1. 1. 2. 3. 5. 8. 13 21 34 55 89试试这个

declare @a int
declare @b int
declare @c int
Declare @i int

set @a=0
set @b=1
set @i=0
set @c=0
Print 'Fibonacci Series'
print @a
print @b
while @i<10 
Begin
set @c=@a+@b
print @c
set @i=@i+1
set @a=@b
set @b=@c
end
0 1. 1. 2. 3. 5. 8. 13 21 34 55 89


1我们不是来为您编写代码的。我们在这里帮助您完成您正在努力工作的代码。2你到底为什么要用SQL来做这个?这是一个疯狂的家庭作业!折磨学生@JonathonReinhart显然有两个人没有读过向上投票悬停文本:这个问题显示了研究的努力;此外,StackOverflow并不是来帮你完成作业的。根据StackOverflow指南,问题是离题的:要求作业帮助的问题必须包括你迄今为止为解决问题所做的工作的摘要,以及对你解决问题的困难的描述。1我们不是来为你编写代码的。我们在这里帮助您完成您正在努力工作的代码。2你到底为什么要用SQL来做这个?这是一个疯狂的家庭作业!折磨学生@JonathonReinhart显然有两个人没有读过向上投票悬停文本:这个问题显示了研究的努力;此外,StackOverflow并不是来帮你完成作业的。根据StackOverflow指南,问题是离题的:要求作业帮助的问题必须包括你迄今为止为解决问题所做工作的摘要,以及你解决问题的困难的描述。