如何在 sql 服务器 SELECT 语句中从右到左排列数字



当执行包含数字列(例如价格)的 SELECT 语句时,结果始终从左到右排序,这会降低可读性。因此,我正在寻找一种从右到左格式化数字列输出的方法。

我已经尝试使用类似的东西

SELECT ... SPACE(15-LEN(A.Nummer))+A.Nummer ...
   FROM Artikel AS A ...

这给出了接近的结果,但取决于字体并不是真的。另一种方法是将"SPACE()"替换为"REPLICA("_,...)",但我不太喜欢输出中的下划线。

除此之外,这个公式会在数字超过 15 的数字上崩溃,因此我寻找一种方法来查找条目的最大长度以使其更省钱

SELECT ... SPACE(MAX(A.Nummer)-LEN(A.Nummer))+A.Nummer ...
   FROM Artikel AS A ...

但由于 MAX 函数的聚合特性,这不起作用。

那么,实现数字列右对齐顺序的最佳方法是什么?

谢谢雷纳

要解决列表框的问题,请查看此链接: http://www.lebans.com/List_Combo.htm我坚信这种类型的调整应该在 UI 层进行,而不是与数据检索混合在一起。

但是为了回答你最初的问题,我创建了一个SQL小提琴:

MS SQL Server 2008 架构设置

CREATE TABLE dbo.some_numbers(n INT);

创建一些示例数据:

INSERT INTO dbo.some_numbers
SELECT CHECKSUM(NEWID())
  FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))X(x);

以下查询使用 OVER() 子句指定要对所有行应用MAX()。包装结果的><仅用于说明目的,不是解决方案所必需的。

查询 1

SELECT '>'+
       SPACE(MAX(LEN(CAST(n AS VARCHAR(MAX))))OVER()-LEN(CAST(n AS VARCHAR(MAX))))+
       CAST(n AS VARCHAR(MAX))+
       '<'
  FROM dbo.some_numbers SN;

结果

|      COLUMN_0 |
|---------------|
| >-1486993739< |
| > 1620287540< |
| >-1451542215< |
| >-1257364471< |
| > -819471559< |
| >-1364318127< |
| >-1190313739< |
| > 1682890896< |
| >-1050938840< |
| >  484064148< |

此查询执行直接案例以显示差异:

查询 2

SELECT '>'+CAST(n AS VARCHAR(MAX))+'<'
  FROM dbo.some_numbers SN;

结果

|      COLUMN_0 |
|---------------|
| >-1486993739< |
|  >1620287540< |
| >-1451542215< |
| >-1257364471< |
|  >-819471559< |
| >-1364318127< |
| >-1190313739< |
|  >1682890896< |
| >-1050938840< |
|   >484064148< |

使用此查询,您仍然需要将显示字体更改为等宽字体,如 COURIER NEW 。否则,正如您所注意到的,结果仍然未对齐。

最新更新