简体   繁体   English

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

[英]How to properly sort alphanumeric in SQL Server 2000

MS SQL Server 2000 MS SQL Server 2000

I have a column in Table A called Name. 我在表A中有一列称为名称。 I wish to sort the Name field. 我希望对“名称”字段进行排序。 Many but not all of the records for Name start will KL and are followed by a number (KL 1234, KL 2, KL 323, etc). 名称开始的许多但不是全部记录将是KL,后跟一个数字(KL 1234,KL 2,KL 323等)。

Table A 表A

Name 名称

Able 能够
Bravo 喝彩
KL 2 吉隆坡2
KL 323 KL 323
KL 1234 吉隆坡1234
Zebra 斑马

If I use 如果我用

Select Name from A 
Order by Name

I get 我懂了

Able 能够
Bravo 喝彩
KL 1234 吉隆坡1234
KL 2 吉隆坡2
KL 323 KL 323
Zebra 斑马

I want 我想要

Able 能够
Bravo 喝彩
KL 2 吉隆坡2
KL 323 KL 323
KL 1234 吉隆坡1234
Zebra 斑马

If they all started with KL I could use 如果他们都以KL开始,我可以使用

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

but this generates an "unble to cast name as big int" error for values that do not start with KL 但是对于不是以KL开头的值,这会生成“无法将名称转换为big int”错误

Thanks for any help. 谢谢你的帮助。

Try this: 尝试这个:

Order By 
    Case When Left(name, 2) = 'KL' 
        Then 'KL' + Replace(Str(Cast(replace(name, 'KL', '') as BigInt), 12), ' ', '0')
        Else name End
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

updated wrong closing ) after comment 评论后更新了错误的结束)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM