SQL Server,如何通过完整字符串排序而只显示部分内容?

问题描述 投票:1回答:1

我的数据看起来像这样:

  Column_1
  '(A) Top Sort'
  '(B) Second Sort'
  '(C) Third custom Sort'

添加了这些字母以允许客户排序。我有很多不仅仅是三个字母,但我会把完整的一套用于示例。

我这样做只显示文字:

  Select
  right(Column_1, len(column_1) -4) as 'Column_1'
  from Table_1
  order by Column_1 ASC

但结果是右边的排序(Column_1,len(column_1)-4),而不是完整字段:

  Column_1
  Second Sort
  Third Custom Sort
  Top Sort

我快疯了。我想通过查询中未显示的内容对其进行排序。不知道该怎么做。如何通过完整字符串对此进行排序并仅显示字符串的一部分?

编辑 - 这是联盟所有声明的最重要部分。只有一个其他部分,它将永远是最后一个(字母Z)

sql sql-server string sql-order-by
1个回答
0
投票

只需在order by中包含表别名:

Select right(Column_1, len(column_1) -4) as Column_1
from Table_1
order by table_1.Column_1 ASC;

问题是Column_1本身可以引用SELECT中定义的别名或表中的列。您的SQL引擎正在将其解析为别名。

另一种解决方案是只为列提供不同的别名,因此没有命名冲突:

Select right(Column_1, len(column_1) -4) as new_Column_1
from Table_1
order by Column_1 ASC;

因为在Column_1列表中找不到SELECT,所以名称将解析为表格中的列。

你不能用union all声明做到这一点。为此,您需要一个子查询:

select . . ., right(Column_1, len(column_1) -4) as column_1
from ((select  . . ., column_1  -- no SUBSTRING!
       from table1
      ) union all
      (select . . .
      )
     ) t
order by t.column_1;
© www.soinside.com 2019 - 2024. All rights reserved.