sql按名称排序,最后是数字

时间:2010-03-05 11:23:23

标签: sql

也许这是一个非常幼稚的问题。 我能以这样的方式订购记录,即以数字开头的值到达记录的末尾吗? 例如,这些是数据库中的值:

1
Bill
Andrew

通过查询转到此处:

Andrew
Bill
1

3 个答案:

答案 0 :(得分:3)

ORDER BY -ISNUMERIC(a), a

答案 1 :(得分:0)

不,只有当您选择DESC排序时,数字才会结束 - 当字母变为“z..a”时。您可能应该执行两个查询 - 通过字母和数字 - 以及联合结果。

答案 2 :(得分:0)

解决方案可以在order by子句中使用两列 - 第一列不对应于真正的DB列,但基于某些计算:

  • 首先,通过为字符串提供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函数?