带有选项卡而不是空格的SQL填充列内容

时间:2016-10-14 15:51:42

标签: sql sql-server padding

我通过SELECT语句动态创建列。此列的内容是一个字符串,然后用作电子邮件的内容。

文字如下:

text 1 | text 2 | text 3 | ...
text 123 | text 223 | text 323 | ...

如您所见,两条线未对齐。预期的输出应该是这样的:

text 1   | text 2   | text 3   | ...
text 123 | text 223 | text 323 | ...

显而易见的解决方案是填充每个字段,以使每个字段具有相同的大小。为此,我使用了以下代码:

LEFT(field1 + REPLICATE(' ', 20), 20)

我的问题是,在Outlook中,文本仍然没有正确对齐,即使如果我将文本复制到记事本中,它也是正确对齐的。原因是,Outlook使用Arial显示文本邮件,而Arial空格中的空格与其他字符的大小不同。因此填充不会产生预期的结果。

我现在的问题是:是否有其他方法可以使用此填充方法以便在Outlook邮件中显示相同大小的字段?可能用标签填充?但我认为我上面的方法不再适用了......

2 个答案:

答案 0 :(得分:1)

关于TAB,我突然意识到你在谈论尾随标签

Declare @Table table (SomeField varchar(50))
Insert into @Table values
('Some Text'),
('Some Longer Text with more')

Select String = SomeField+replicate(char(9),(30-Len(SomeField))/4)+'|'
From @Table

返回

Some Text                   |
Some Longer Text with more  |

答案 1 :(得分:0)

如果你不想(或者不能)像@techspider和@Shnugo所提到的那样创建HTML,你可以简单地将你的字符串转换为char(20)

cast(field1 as char(20))

例如

Select '| '+cast('text1' as char(20))+' | '+cast('text1' as char(20))+'|'

返回

| text1                | text1               |