如何在SQL Server 2000中正确排序字母数字

时间:2008-12-10 15:52:45

标签: sql sorting sql-server-2000

MS SQL Server 2000

我在表A中有一个名为Name的列。我希望对Name字段进行排序。名称开始的很多但不是全部的记录将是KL,然后是一个数字(KL 1234,KL 2,KL 323等)。

表A

名称


布拉沃
KL 2
KL 323
KL 1234
斑马

如果我使用

Select Name from A 
Order by Name

我得到了


布拉沃
KL 1234
KL 2
KL 323
斑马

我想要


布拉沃
KL 2
KL 323
KL 1234
斑马

如果他们都以KL开始,我可以使用

Select Name from A
Order by cast(replace(name, 'KL', '') as big int)

但是对于不以KL开头的值,这会生成“无法将名称转换为big int”错误

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

试试这个:

Order By 
    Case When Left(name, 2) = 'KL' 
        Then 'KL' + Replace(Str(Cast(replace(name, 'KL', '') as BigInt), 12), ' ', '0')
        Else name End

答案 1 :(得分:0)

ORDER BY 
    CASE WHEN CHARINDEX(' ', name)=0 THEN name 
        ELSE LEFT(name, CHARINDEX(' ', name)) END,
    CASE WHEN CHARINDEX(' ', name)=0 THEN 0
        ELSE CONVERT(BIGINT, 
            SUBSTRING(name, CHARINDEX(' ', name)+1, LEN(name))) END
评论

更新错误结束