如何使用字母数字值对数据进行排序

时间:2008-12-10 09:58:55

标签: sql

我有以下值:d1, d45, d79, d33, d100

我想从我的表中按升序对这些变量进行排序。

获取输出的查询是什么:

d1
d33
d45
d79
d100

4 个答案:

答案 0 :(得分:1)

你想要的是一种“自然排序”。对于Microsoft SQL Server 2005,请参阅this question。对于其他语言,请参阅(例如)this other question

答案 1 :(得分:0)

抱歉,根本不是SQL的答案。 :)对于只有一个字母的变体按长度排序和alpha。

答案 2 :(得分:0)

如果可以保证/ \ w \ d + / ...的模式

在postgres中:

select foo from bar order by cast(substring(foo from 2) as int)

..和其他SQL风格类似。昂贵的头脑。

编辑:androids解决方案看起来也很好:

..order by char_length(foo),foo

答案 3 :(得分:0)

如果我们可以假设数据值只包含字母d和数值,那么您也可以使用:

select column from YourTable
order by convert(int, replace(column, 'd', ''))

如果它包含任何其他字母,则此方法很快就会变得无法使用:

select column from YourTable
order by convert(int, 
        replace(replace(replace(replace(replace(
            column, 'a', ''),
                'b', ''),
                'c', ''),
                'd', ''), 
                'e', '')
        )