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
*/
相关文章推荐
- SQL高手请进来一下,谢谢
- 都进来看看,对这个SQL连接你们认为有何更好的看法?
- 求助求助——请教各位高手,抽出一点宝贵的时间根据这个实例讲解一下应该如何分层呢?
- sql去重问题(最近java笔试总遇到这个问题,忍不住要记录一下)
- 各位SQL的朋友请进来一下
- 谁能解释一下v$sqlarea,v$sql,v$sqltext这个3个视图的作用与区别?
- 求助求助——请教各位高手,抽出一点宝贵的时间根据这个实例讲解一下应该如何分层呢?
- [VB.NET]再次讨论向Excel插入图片方法,有兴趣的朋友可以进来看一下,帮我解决一下问题!谢了
- 请高手们帮忙看一下为什么我这个asp的搜索功能搜索不了?请帮忙修改一下为谢!
- C#/VC++做过数据分析软件的朋友进来看看,帮我分析一下这个软件是如何做的
- Swift初学有一点难理解的东西,整理了一下,想明白了。
- 卸载了PL/SQL Developer,说一下与Toad for Oracle的对照
- 【每日更新】【SQL实用大杂烩】
- 大家都辛苦了,进来放松一下,保证你满意哦!
- 揭秘FaceBook Puma演变及发展——FaceBook公司的实时数据分析平台是建立在Hadoop 和Hive的基础之上,这个根能立稳吗?hive又是sql的Map reduce任务拆分,底层还是依赖hbase和hdfs存储
- 以后抽时间关注一下Genome.js 这个东西。
- CRC校验算法学习(这个算法看了很多遍了,都是囫囵吞枣,这次将资料拷贝到这里,好好学习一下)
- 通过操作系统的进程ID,查询sql_id及哪个主机执行的这个东东
- 在access中执行SQL,SQL中包含IIF,取出来的结果集字符串被截断了,请教各位大侠,这个是为什么呀?谢谢!
- 讲一下SqlDataReader的关闭问题,出现"阅读器关闭时尝试调用 FieldCount 无效"