如何对按字母顺序排列的文本字段进行排序?

时间:2011-08-25 13:56:32

标签: sql-server ms-access

我有几条需要排序的记录,但字段是varchar。他们使用A-Z的英文字母。 Z之后它来自AA,AB,AC等...例如:

CREATE TABLE #foo(x VARCHAR(30));

INSERT #foo(x) SELECT 'A'
UNION SELECT 'AA'
UNION SELECT 'Z'
UNION SELECT 'B'
UNION SELECT 'AB'
UNION SELECT 'BB';

我想要的结果是:

A
B
Z
AA
AB
BB

我知道我应该使用数字字段并按此排序,但目前我没有这个选项。我使用的是SQL Server,前端是Access 2010中的报告。

4 个答案:

答案 0 :(得分:13)

这可能有用。您可以按值的长度进行排序,该值将对单个字符进行分组,后跟双字符。在这些组中,值将按字母顺序排序。

SELECT      Column1 
FROM        dbo.Table1 
ORDER BY    LEN(Column1)
        ,   Column1

答案 1 :(得分:6)

好吧,我有点困惑。听起来你想要一个时髦的排序顺序。你首先需要单个字母,然后是正常的排序顺序。 (完全正常的排序将有A,AA,AB,AC,然后是B)

首先,对字母字段进行简单排序

 select SORTFIELD, OTHER, COLUMNS, IN-TABLE
 from  MYTABLE
 order by SORTFIELD

但那不是你想要的。问题是你永远不会告诉我们你想要AAA的地方。它是在AA之后还是在ZZ之后?

ZZ后的

AAA:

 select SORTFIELD, OTHER, COLUMNS, IN-TABLE
 from  MYTABLE
 order by LEN(SORTFIELD), SORTFIELD
AA之后的AAA(AB之前)

 select SORTFIELD, OTHER, COLUMNS, IN-TABLE
 from  MYTABLE
 order by case LEN(SORTFIELD) when 1 then 0 else 1 end , SORTFIELD

答案 2 :(得分:5)

Declare @SomeStuff table (val varchar(10));

Insert @SomeStuff (val) Values ('a');
Insert @SomeStuff (val) Values ('b');
Insert @SomeStuff (val) Values ('c');
Insert @SomeStuff (val) Values ('az');
Insert @SomeStuff (val) Values ('ab');
Insert @SomeStuff (val) Values ('zz');
Insert @SomeStuff (val) Values ('abc1');


Select * From @SomeStuff order by LEN(val), val

使用SQL Server但仍然可以使用。

结果:

val
---
a
b
c
ab
az
zz
abc1

答案 3 :(得分:2)

以下是您的示例

Select *
from MyTable
Order By foo ASC, foo2 ASC, foo3 ASC

使用按行排序ASC将允许您按字母顺序排序该列