2011-08-25 231 views
7

我有一些需要排序的記錄,但該字段是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中的報告中。

+3

你有問題嗎? – Jacob

+2

我添加了表結構和@Rick的所需結果。 –

回答

12

這可能有效。您可以按照將單個字符分組後跟雙字符的值的長度進行排序。在這些組內,這些值將按字母順序排序。

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

+1簡單 –

+0

雖然不是可靠的。 –

2

這裏是你

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

柱ASC使用命令將允許您訂購該列的例子字母

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 
6

OK,我有點糊塗了。這聽起來像你想要一個時髦的排序順序。你首先需要單個字母,然後是正常的排序順序。 (一個完全正常的排序將有A,AA,AB,AC,然後B)

首先,簡單的排序上的字母場

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

但是,這不是你想要的。問題是你永遠不會告訴我們你想要AAA的位置。它是在AA之後還是在ZZ之後?

AAA ZZ後:

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

AAA AA後(AB)之前

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