在sql-server 2014中排序alpa数字字段

时间:2016-12-01 20:55:06

标签: sql-server

我需要在sql-server 2014中对字母数字字段进行排序。

首先需要按文字排序,然后按数字排序。

例如:

12AA
12AA
20EA
3CA
4BA
70AA
81CA
81CA
8CA
90EA

将会是这样的

12AA
12AA
70AA
4BA
3CA
8CA
81CA
81CA
20EA
90EA

另一个例子

10EA
21C
31CA
81CA

将如下所示:

**21C
31CA
81CA
10EA**

我尝试这样的事情:

SELECT Section
FROM dbo.Section
ORDER BY LEFT(Section, PATINDEX('%[0-9]%', Section)-1), -- alphabetical sort
         CONVERT(INT, SUBSTRING(Section, PATINDEX('%[0-9]%', Section), LEN(Section))) -- numerical

但它不起作用。

感谢,

3 个答案:

答案 0 :(得分:1)

你很亲密

...
 Order By 
       Substring(Section,PatIndex('%[A-Z]%',Section) ,25)
      ,Cast(Left(Section,PatIndex('%[A-Z]%',Section)-1 ) as int)

返回

SomeField
12AA
12AA
70AA
4BA
3CA
8CA
81CA
81CA
20EA
90EA

答案 1 :(得分:0)

请尝试以下订单:

order by RIGHT(section,2), CASE WHEN LEN(section)=3 THEN '0'+section else section end asc

答案 2 :(得分:0)

SELECT 
  Section
FROM dbo.Section
ORDER BY 
  SUBSTRING(Section, PATINDEX('%[A-Z]%', Section), LEN(Section)),
  CAST(LEFT(Section, PATINDEX('%[A-Z]%', Section)-1) AS INT)