对齐SQL服务器查询结果

时间:2016-05-09 19:18:43

标签: sql sql-server-2008

select '(''{' + cast(UniqueId as varchar(MAX)) + '}'',''' + [Name] + ''',''' + Address+ '''),'
from testTable;

以上查询给出了以下结果

('{C7F93C19-327E-47C1-B4A8-C397FF82D7C8}','name1','Address111'),
('{A686D54D-C742-4677-899A-AEFC39440615}','This is a long name','Address2'),
('{7DEF4222-1192-4DCA-934F-208D49FCE3E5}','This is a very loooooooooong name','Address 3'),

如何格式化结果以达到以下结果。通过在第二个coloumn之后保存一些空格来对齐第三个coloumn

('{C7F93C19-327E-47C1-B4A8-C397FF82D7C8}','name1',                                'Address111'),
('{A686D54D-C742-4677-899A-AEFC39440615}','This is a long name',                  'Address2'),
('{7DEF4222-1192-4DCA-934F-208D49FCE3E5}','This is a very loooooooooong name',    'Address 3'),

2 个答案:

答案 0 :(得分:0)

这不是SQL的用途,即使它似乎有用。

SQL应提供原始数据,格式化是应用程序的任务。这可能是e。 G。一个PHP页面,将数据插入到HTML表或GUI应用程序中,用C ++,Java,C#编写,......适当地呈现数据。

所以你的查询看起来像这样:

SELECT cast(UniqueId as varchar(MAX)), [Name], Address FROM testTable

如果它是一个简单的C控制台应用程序,您可以迭代所有结果,获得每列的最大长度,然后输出数据,再次迭代它:

printf(
    "%s, %-*s, %-*s\n",
    currentId,
    maxLenName, currentName,
    maxLenAddress, currentAddress
);

编辑:您也可以查询长度:

SELECT MAX(CHAR_LENGTH([Name])), MAX(CHAR_LENGTH(Address)) FROM testTable

然后你只需要迭代数据一次。

答案 1 :(得分:0)

以下查询帮助我进行格式化

DECLARE @MaxKeyLength INT = (SELECT MAX(LEN([Name])) FROM testTable)


select '(''{' + cast(UniqueId as varchar(MAX)) + '}'',''' + LEFT(LTRIM([Name]) + ''',                                             ', @MaxKeyLength + 4) + ''''  + Address+ '''),'
from testTable;