宝塔形数据的处理.sql

/*--

第一层   -                    1
第二层   -           2                3
第三层   -      4        5        6        7
第四层   -    8   9   10   11   12   13   14  15

将顺序的数据(1~N)依如下规则排列
1,排成塔形.
2,下一层所排数字是对上一层的两倍.(第一层为1个,第二层为2个,第三层4个,如此类推)
3,自上到下,自左到右紧密排列.

现在要找出每个号码下面号码的个数.

--邹建 2004.4--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_id]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_id]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_id_num]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_id_num]
GO

--得到每个号码下面包含的号码
create function f_id(
@num int,        --那个数下面的子
@max_level int    --统计到第几层
)returns @re table(id int identity(1,1),num int,level int)
as
begin
    declare @level int,@left int,@i int,@j int
    select @level=0,@i=@num
    while @i>1
        select @level=@level+1,@i=@i/2
    if @level<@max_level
    begin
        insert @re values(@num,@level+1)
        select @left=(@num%power(2,@level))*2
            ,@level=@level+1
            ,@num=power(2,@level)
            ,@i=0,@j=2
        while @level<@max_level
        begin
            while @i<@j
            begin
                insert @re values(@left+@num+@i,@level+1)
                set @i=@i+1
            end
            select @level=@level+1
                ,@left=@left*2
                ,@num=@num*2
                ,@i=0,@j=@j*2
        end
    end
    return
end
go

--得到每个号码下面包含的号码个数(作者: DigJim(挖土) )
create function f_id_num(
@inputnum int,        --数字
@totallevel int        --层数
)returns int
as
begin
    declare @i int,@count int,@result float

    --判断这个数所在的层
    select @i=1
        ,@result=@inputnum/2
    
    while @result-1>0
        select @result=@result/2,@i=@i+1
    set @i=@totallevel-@i-1

    --计算这个数包含的个数
    set @count =2
    while @i>0
        select @count=@count*2,@i=@i-1
    return @count-2
end
go

--调用实现查询
select * from f_id(3,4)

select dbo.f_id_num(3,4)
go

/*--测试结果
id          num         level       
----------- ----------- -----------
1           3           2
2           6           3
3           7           3
4           12          4
5           13          4
6           14          4
7           15          4

(所影响的行数为 7 行)
--*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
宝塔环境是一款方便易用的服务器管理面板,可以帮助用户搭建和管理各种服务器环境。Flask是一款基于Python的轻量级Web框架,可用于开发Web应用程序。 要在宝塔环境中连接SQL Server 2008,在搭建Flask应用程序之前,你需要先确保服务器已安装了对应的数据库驱动程序。在Python中,一个常用的SQL Server数据库驱动程序是pyodbc。 首先,登录宝塔面板,进入你要配置的Web应用程序的设置页面。在界面中,你可以找到一个名为“环境变量”的部分。在这里,你可以设置一些环境变量,以便在你的应用程序中使用。 在“环境变量”部分,你可以添加键-值对,键用来表示变量名称,而值则表示变量的值。在这里,你需要添加一个名为”PYODBC_DRIVER“的环境变量,并将其值设置为”ODBC Driver 17 for SQL Server“。 添加完环境变量后,保存设置并重启你的Web应用程序。接下来,在你的Flask应用程序中,你可以使用pyodbc来连接到SQL Server 2008。 首先,你需要在代码中导入pyodbc模块。然后,通过使用pyodbc的connect方法来创建一个数据库连接。在connect方法的参数中,你可以指定连接SQL Server所需的主机名、数据库名称、用户名和密码等。 一旦连接成功,你就可以在Flask应用程序中使用pyodbc来执行各种SQL查询,包括查询数据、插入数据或更新数据等。另外,你也可以使用pyodbc来执行存储过程或调用SQL Server中的其他功能。 总之,在宝塔环境中连接SQL Server 2008的步骤可以总结为:添加环境变量PYODBC_DRIVER的值为ODBC Driver 17 for SQL Server,然后在Flask应用程序中使用pyodbc模块来连接到SQL Server,执行各种SQL查询或操作。 希望以上回答对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值