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

发布于 2024-07-10 19:47:59 字数 667 浏览 8 评论 0原文

MS SQL Server 2000

我在表 A 中有一个名为“名称”的列。 我希望对名称字段进行排序。 许多(但不是全部)名称记录都以 KL 开头,后跟数字(KL 1234、KL 2、KL 323 等)。

表 A

姓名

能力
太棒了
吉隆坡2号
吉隆坡323
吉隆坡 1234
Zebra

如果我使用

Select Name from A 
Order by Name

我就会

Able
太棒了
吉隆坡 1234
吉隆坡2号
吉隆坡323
斑马

我想要

Able
太棒了
吉隆坡2号
吉隆坡323
吉隆坡 1234
Zebra

如果它们都以 KL 开头,我可以使用,

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

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

感谢您的帮助。

MS SQL Server 2000

I have a column in Table A called Name. 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).

Table A

Name

Able
Bravo
KL 2
KL 323
KL 1234
Zebra

If I use

Select Name from A 
Order by Name

I get

Able
Bravo
KL 1234
KL 2
KL 323
Zebra

I want

Able
Bravo
KL 2
KL 323
KL 1234
Zebra

If they all started with KL I could use

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

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

埋情葬爱 2024-07-17 19:47:59

尝试这个:

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

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
可是我不能没有你 2024-07-17 19:47:59
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

评论后更新了错误的关闭)

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文