使用sql排列数字而不是字母的列

时间:2011-07-02 12:47:38

标签: sql

如何编写SQL语句来安排此列

columnA
-------
10A
11C
12V
10D
8F
8R
9C

以便按此顺序返回结果集

columnA
-------
8F
8R
9C
10A
10D
11C
12V

(以数字然后按字母顺序排列)?

我试过这句话:

Select columnA from tblStudents order by columnA

但它没有奏效。

1 个答案:

答案 0 :(得分:4)

您必须将字符串拆分为数字部分和文本部分,并将数字部分转换为实际数字。

我不知道你正在使用哪种SQL方言;这适用于Microsoft SQL Server:

select columnA
from tblStudents
order by
  convert(int, substring(columnA, 1, patindex('%[^0-9]%') - 1)),
  substring(columnA, patindex('%[^0-9]%'), 1000)

patindex('%[^0-9]%')会在字符串中找到第一个非数字,因此第一个substring获取该点的字符,第二个substring从该点获取字符到字符串的末尾。