SQL - 使用字母数字字符排序

时间:2014-01-10 15:36:50

标签: sql sql-server tsql sql-server-2005

我有下表:

create table #tbl
(
 product_id nvarchar(50)
)

insert into #tbl values ('011014-A11')
insert into #tbl values ('011014-A10')
insert into #tbl values ('011014')
insert into #tbl values ('011014-A1')
insert into #tbl values ('011014-A2')

我想订购这样的产品ID(从最小到最大):

011014
011014-A1
011014-A2
011014-A10
011014-A11

这是我尝试过的,但它不起作用:

select product_id
from #tbl
order by product_id desc

我该怎么做?

我如何获得最好的product_id? 我试过这个,但它没有工作:

select top 1 product_id
from #tbl
order by product_id desc

2 个答案:

答案 0 :(得分:2)

尝试以下查询以按预期顺序获取结果。

<强> Fiddle demo

Select product_id
From tbl              --Please change table name to #tbl in your actual query
Order by len(product_id), product_id

答案 1 :(得分:0)

您已经接受了Kaf的答案,它可能适合您,但只有前8个字符相同才能正常工作。例如,如果您添加了011014-B1的值,则结果将为:

011014
011014-A1
011014-A2
011014-B1
011014-A10
011014-A11

如果您的模式是一致的(按前8个字符排序,然后按照后面的“数字”排序,这可能对您更有效:

Select product_id
From #tbl              
Order by LEFT(product_id,8), CAST(SUBSTRING(product_id,9,9) AS INT)