首页 > 解决方案 > SQL如何按字母顺序对带有数字的文本进行排序,然后按数字排序

问题描述

我有一个包含字母数字值的表。我想按字母顺序然后按数字顺序排列它们。我正在编辑问题以获得更多帮助...我只需要对字符串末尾的数字进行数字排序...

例如我想要这个

ControlName (column)
--------------------
VALVE 1
MAIN VALVE
VALVE 10
BOILER 2
VALVE 17
BOILER 1
VALVE 19
VALVE 2

要这样排序

ControlName (column)
----------------
BOILER 1
BOILER 2
MAIN VALVE
VALVE 1
VALVE 2
VALVE 10
VALVE 17
VALVE 19

什么是可以完成此任务的(轻量级)查询?

标签: sqlsql-servernumeric

解决方案


由于现在存在问题,如果字符串中有超过 1 组数字部分,我们希望按最后一组数字进行排序。这段代码将做到这一点。如果只有一组数字或什至没有数字,则此方法有效。

declare @Something table
(
    ControlName varchar(50)
)

insert @Something values
('VALVE 1')
, ('MAIN VALVE')
, ('VALVE 10')
, ('BOILER 2')
, ('VALVE 17')
, ('BOILER 1')
, ('VALVE 19')
, ('VALVE 2')

select *
from @Something
order by left(ControlName, LEN(ControlName) - patindex('%[^0-9]%', REVERSE(ControlName)) + 1) --this gets the "prefix" or characters before the last set of numbers
    , convert(int, right(ControlName, patindex('%[^0-9]%', REVERSE(ControlName)) - 1)) --this gets the last set of numbers

推荐阅读