文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» 微软SQL Server专区 » SQL Server应用开发 » 求教高手,关于SQL 字符串排序问题       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [讨论] 求教高手,关于SQL 字符串排序问题  ( 查看:312  回复:2 )   
 
2007
新新人类  点击可查看详细



十二生肖之羊   巨蟹座   行业勋章   技术勋章   诚信兄弟  
帖子 34
精华 0
无忧币 330
积分 62
阅读权限 20
来自 (保密)
注册日期 2007-2-2
最后登录 2008-7-14 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-3-4 11:05   标题:求教高手,关于SQL 字符串排序问题
上一帖 |
前天有人给我出了一题,让我用SQL写出一个对字符串排序的算法。我想了一个算法见下面代码,但不是很满意,不知道各位高手有没有什么好的建议

DECLARE @StrIn VARCHAR(30),@StrOut VARCHAR(30)
SET @StrIn='我是DB不要你说是吗select'

DECLARE @TmpChar VarCHAR(2)
DECLARE @i INT,@j INT,@l int
DECLARE @t TABLE(id INT,cs VarCHAR(2))
--DECLARE @m TABLE(StrCol VARCHAR(30))  
SET @l=DATALENGTH(@StrIn)
SET @i=1

--将字符串分拆到临时表
WHILE @i<=@l
        BEGIN
                INSERT INTO @t VALUES(@i,SUBSTRING(@StrIn,@i,1))
                SET @i=@i+1        
        END

--从临时表中重新组织字符串
DECLARE ct CURSOR FOR SELECT cs FROM @t ORDER BY cs
OPEN ct
FETCH NEXT FROM ct  INTO @TmpChar
WHILE @@FETCH_STATUS=0
        BEGIN
               
                SET @StrOut=ISNULL(@StrOut,'')+@TmpChar         
               
                FETCH NEXT FROM ct  INTO @TmpChar
        
        END
CLOSE ct
DEALLOCATE ct
SELECT @StrOut

[ 本帖最后由 2007 于 2008-3-4 11:07 编辑 ]



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-3-4 11:051楼
[ 顶部 ]
 
boyi55
副版主  点击可查看详细


诚信兄弟   天秤座  
帖子 919
精华 1
无忧币 3898
积分 959
阅读权限 140
来自 (保密)
注册日期 2006-1-12
最后登录 2008-10-10 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-3-4 16:20 
刚自己写了下试:
declare @a varchar(200),@i int,@m varchar(200),@n int
set @a='12345676890asajlkjasdlfkbvzxcvjakjfoqiewrulzkja;djfalsdjflaksjf'
set @i=1
set @n=1
-- select substring(@a,@i,1)
while @i<len(@a)

begin
        while @n<len(@a)
                begin
                        if substring(@a,@n,1)>=substring(@a,@n+1,1)
                                begin
                                        set @m=isnull(left(@a,@n-1),'')+substring(@a,@n+1,1)+substring(@a,@n,1)+isnull(right(@a,len(@a)-1-@n),'')
                                set @n=@n+1
-- select @i-1,@m,'1'
                                end
                        else
                                begin
                                        set @m=isnull(left(@a,@n-1),'')+substring(@a,@n,1)+substring(@a,@n+1,1)+isnull(right(@a,len(@a)-1-@n),'')
                                set @n=@n+1
-- select @i-1,@m,'2'
                                end
set @a=@m

                end
-- select @a,'3'
set @n=1
set @i=@i+1
end
select @a

[[i] 本帖最后由 boyi55 于 2008-3-4 16:22 编辑 [/i]]



春江潮水连海平/海上明月共潮生/滟滟随波千万里/何处春江无月明!
2008-3-4 16:202楼
[ 顶部 ]
 
2007
新新人类  点击可查看详细



十二生肖之羊   巨蟹座   行业勋章   技术勋章   诚信兄弟  
帖子 34
精华 0
无忧币 330
积分 62
阅读权限 20
来自 (保密)
注册日期 2007-2-2
最后登录 2008-7-14 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-3-4 18:40 
恩,这个算法不错!应该是标准的排序算法了。还有没有高手有别的算法呢?



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-3-4 18:403楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号