我需要在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
但它不起作用。
感谢,
答案 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)