【问题标题】:How do I sort an alphabetical text field?如何对按字母顺序排列的文本字段进行排序?
【发布时间】:2011-08-25 13:56:31
【问题描述】:

我有几条记录需要排序,但字段是 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 中的报告中。

【问题讨论】:

  • 我为@Rick 添加了表格结构和想要的结果。

标签: sql-server ms-access


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    好吧,我有点困惑。听起来你想要一个时髦的排序顺序。您首先需要单个字母,然后是正常的排序顺序。 (完全正常的排序将有 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
    

    AAA AA 之后(AB 之前)

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

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        【解决方案4】:

        给你一个例子

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多