您的位置:首页 > 数据库

sql每日一练 进来练一下 这个有一点难 都进来看一下吧

2008-02-23 12:22 453 查看
有1-16的数字
在SQL中输出
输出的样式是
1121110
213169
314158
4567



--================================================

--绕圈的SQL算法(感觉很笨,不知道有没有更好的算法)

--作者:冷箫轻笛

--日期:2008-02-21

--执行方式(参数必须为整数的平方,但大小并不是无限制的)

--execraoquan2500

--================================================


createprocraoquan

(

@numint

)

as

begin


setnocounton


declare@iint

set@i=SQRT(@num)


ifCEILING(@i)<>@i

return


declare@tablevarchar(8000)

declare@insertvarchar(8000)

declare@updatevarchar(8000)

declare@printvarchar(8000)


select@insert='',@update='',@print=''


select@table='

createtable#t

('


declare@kint

select@k=1

while(@k<=@i)

begin

select@table=@table+'

['+cast(@kasvarchar)+']int,'

select@insert=@insert+'insertinto#t([1])select'+cast(@kasvarchar)+''

select@k=@k+1

end


select@table=reverse(stuff(reverse(@table),1,1,''))


select@table=@table+'

)

'


select@update='

declare@rint

declare@cint

select@r=SQRT('+cast(@numasvarchar)+'),@c=1


declare@iint

select@i=SQRT('+cast(@numasvarchar)+')+1

declare@s1char(1)

select@s1=''+''

declare@s2char(1)

select@s2=''c''

declare@s3int--用于计算符号

select@s3=0

declare@lenint

select@len=SQRT('+cast(@numasvarchar)+')

declare@len2int

select@len2=0



while(@len>0)

begin

if@s3%2=0

select@len=@len-1

select@len2=@len


while(@len2>0)

begin

if@s1=''+''

begin

if@s2=''c''

select@c=@c+1

else

select@r=@r+1

end

else

begin

if@s2=''c''

select@c=@c-1

else

select@r=@r-1

end


declare@sqlvarchar(8000)

select@sql=''update#tset[''+cast(@casvarchar)+'']=''+cast(@iasvarchar)+

''where[1]=''+cast(@rasvarchar)

exec(@sql)


select@len2=@len2-1

select@i=@i+1


end


if@s3/2%2=1

select@s1=''+''

else

select@s1=''-''


if@s2=''c''

select@s2=''r''

else

select@s2=''c''


select@s3=@s3+1

end


--select*from#t

'


select@print='

declare@stringvarchar(8000)

select@string=''''

declare@connvarchar(1000)

select@conn=''''

declare@iiint

select@ii=sqrt('+cast(@numasvarchar)+')

declare@mint

select@m=1

declare@nint

select@n=1

while(@ii>=@n)

begin

select@string=''declare@connvarchar(1000)

select@conn=''

select@m=1


while(@ii>=@m)

begin

select@string=@string+''right(SPACE(len(cast('+cast(@numasvarchar)+'asvarchar)))+cast([''+cast(@masvarchar)+'']asvarchar),len(cast('+cast(@numasvarchar)+'asvarchar))+1)+''

select@m=@m+1

end

select@string=reverse(stuff(reverse(@string),1,1,''''))

select@string=@string+''from#twhere[1]=''+cast(@nasvarchar)+''

print@conn''

exec(@string)

select@n=@n+1

end

'

exec(@table+@insert+@update+@print)


end



--测试
execraoquan400

/*
176757473727170696867666564636261605958
27714414314214114013913813713613513413313213113012912857
37814520420320220120019919819719619519419319219119012756
47914620525625525425325225125024924824724624524418912655
58014720625730029929829729629529429329229129024318812554
68114820725830133633533433333233133032932828924218712453
78214920825930233736436336236136035935832728824118612352
88315020926030333836538438338238138035732628724018512251
98415121026130433936638539639539437935632528623918412150
108515221126230534036738639740039337835532428523818312049
118615321226330634136838739839939237735432328423718211948
128715421326430734236938838939039137635332228323618111847
138815521426530834337037137237337437535232128223518011746
148915621526630934434534634734834935035132028123417911645
159015721626731031131231331431531631731831928023317811544
169115821726826927027127227327427527627727827923217711443
179215921821922022122222322422522622722822923023117611342
189316016116216316416516616716816917017117217317417511241
1994959697989910010110210310410510610710810911011140
2021222324252627282930313233343536373839
*/


--================================================
--绕圈的SQL算法(感觉很笨,不知道有没有更好的算法)
--作者:jht
--日期:2008-02-21
--执行方式(参数必须为整数的平方,但大小并不是无限制的)
--seta=20
--================================================

declare@aint,@kint,@svarchar(1000),@iint
declare@rint,@cint,@rfint,@cfint
select@a=20,@k=0
createtable#(idint)
while@k<@a
begin
insert#(id)select@k
set@s='altertable#addc'+rtrim(@k)+'int'exec(@s)
set@k=@k+1
end
select@r=-1,@c=0,@rf=1,@cf=0,@i=0
while@a>0
begin
set@k=0
while@k<@a
begin
select@k=@k+1,@i=@i+1,@r=@r+@rf,@c=@c+@cf
set@s='update#setc'+rtrim(@c)+'='+rtrim(@i)+'whereid='+rtrim(@r)exec(@s)
print@s
end
if@rf=1and@cf=0select@rf=0,@cf=1
elseif@rf=0and@cf=1select@rf=-1,@cf=0
elseif@rf=-1and@cf=0select@rf=0,@cf=-1
elseif@rf=0and@cf=-1select@rf=1,@cf=0
if@rf=0set@a=@a-1
end
select*from#
droptable#
/*
idc0c1c2c3c4c5c6c7c8c9c10c11c12c13c14c15c16c17c18c19
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0176757473727170696867666564636261605958
127714414314214114013913813713613513413313213113012912857
237814520420320220120019919819719619519419319219119012756
347914620525625525425325225125024924824724624524418912655
458014720625730029929829729629529429329229129024318812554
568114820725830133633533433333233133032932828924218712453
678214920825930233736436336236136035935832728824118612352
788315020926030333836538438338238138035732628724018512251
898415121026130433936638539639539437935632528623918412150
9108515221126230534036738639740039337835532428523818312049
10118615321226330634136838739839939237735432328423718211948
11128715421326430734236938838939039137635332228323618111847
12138815521426530834337037137237337437535232128223518011746
13148915621526630934434534634734834935035132028123417911645
14159015721626731031131231331431531631731831928023317811544
15169115821726826927027127227327427527627727827923217711443
16179215921821922022122222322422522622722822923023117611342
17189316016116216316416516616716816917017117217317417511241
181994959697989910010110210310410510610710810911011140
192021222324252627282930313233343536373839
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐