SQL数据库如何按照表内某列int值的大小进行排序求指教!

SQL数据库如何按照表内某列int值的大小进行排序求指教!,第1张

怎么说呢,并不是说做不到,而是你的理解有一点点问题。

数据库中的“表”总的来说是无序的,也就是说,它“不应该”有“顺序”的概念。一个表里的每个条目都是一样的,本质上没有“先后”。“顺序”体现在对表的“查询”动作中。换句话说,就是你的order by才告诉引擎,查询到的若干条目应该以什么样的顺序排列。这是一个很科学也很重要的概念。因为在实际使用中,你可能今天想按某个时间字段排序,明天想按某个索引号排序,但这些所谓的“顺序”都是你想要看到的数据的一种投影方式,而并不是数据本身应当具有的属性。

如果你确实需要对数据库中的所有条目,按某个字段排列的话,比较可行的办法就是把它们都读出来,排序,清空或删除表(并重建),重新写入数据。

看到这个问题感兴趣了把 我用sqlserver2008 玩了下 源码如下:

declare @tb table

(

val varchar(50)

)

insert into @tb values('106-Y00001')

insert into @tb values('106-Y00002')

insert into @tb values('106-C00001')

insert into @tb values('106-C00002')

insert into @tb values('106-1969-D002')

insert into @tb values('106-1969-D001')

insert into @tb values('106-D00001')

insert into @tb values('106-D00002')

insert into @tb values('106-1969-Y001')

insert into @tb values('106-1969-Y002')

insert into @tb values('106-1969-C001')

insert into @tb values('106-1969-C002')

insert into @tb values('106-1969-FC001')

insert into @tb values('106-1969-FY002')

insert into @tb values('106-1970-Y001')

insert into @tb values('106-1971-C001')

insert into @tb values('107-Y00001')

insert into @tb values('108-Y00001')

select *,SUBSTRING(val,1,3) a,case LEN(val) - charindex('-',reverse(val)) when 3 then '0'+ case substring(reverse(substring(reverse(val),1,charindex('-',reverse(val)) - 1)),1,1) when 'Y' then '0' when 'C' then '1' else '2' end

else '1'+ SUBSTRING(val,5,4) + case substring(reverse(substring(reverse(val),1,charindex('-',reverse(val)) - 1)),1,1) when 'Y' then '0' when 'C' then '1' when 'D' then '2' else '3'+ case substring(reverse(substring(reverse(val),1,charindex('-',reverse(val)) - 1)),2,1) when 'C' then '0' else '1' end end

end b

from @tb

order by a,b

大概看了下没问题,感觉思路对就OK了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6620319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存