2010-03-05 66 views
2

也许这是一个非常幼稚的问题。 我可以以这种方式订购记录,以数字开头的值到记录的末尾吗? 例如,这些都在数据库中的值:sql按名称排序,数字在末尾

1 
Bill 
Andrew 

在此把与查询:

Andrew 
Bill 
1 
+0

什么类型的系统?如果您使用的是MSSQL Server中的整理技巧,则可以使用一些整洁的技巧。否则,工会会做你所需要的。 – 2012-06-20 14:05:58

回答

0

没有,很多人将去年底只有当你将选择降序排序 - 当字母变成“z..a”。您可能应该执行两个查询 - 按字母和数字 - 以及联合结果。

3
ORDER BY -ISNUMERIC(a), a 
+0

我做了一些类似于此的可能*开始*的数字,但不是完全数字的列:'ORDER BY ISNUMERIC(LEFT(a,1)),a' - 在我的情况下(SQL Server 2000)它正确排序当我离开ISNUMERIC积极的结果。 – 2011-04-26 21:29:22

+0

这会损害性能,因为每个项目都需要找到需要排序的数字。它可以通过各种方式来完成适当的分类,但所有应用都会遇到性能问题。 – 2012-06-20 14:04:19

0

一个解决方案可以通过子句中使用您的订单上两列 - 不对应于真正的DB列第一位的,但基于一些计算:被什么东西

  • 首先,为了使给出了数字
    • 这将所有的字符串推到结果集的开头
  • 而且,T 1串,和2母鸡,为了通过列的内容


像这样(大多是伪代码)的东西可能会有所帮助:

select * 
from your_table 
where ... 
order by case when your_column >= '0' and your_column <= '9' then 2 else 1 end, 
    your_column 

通过将确保数字顺序的第一部分被置于非后 - 数字;第二部分只是做一个正常的排序。


注:我想可以修改条件来使用函数来确定your_column是否包含字符串或数字;也许有某种is_number函数,由您的数据库系统提供?