如何生成特定长度的单列?

How to produce a single column of a specific length?

这并不像看起来那么简单。我挣扎了几个小时,用谷歌搜索无济于事。

我想生成一个长度始终为 30 个字符的列,因此如果该列仅包含 2 个字符,则其他 28 个字符应该是空格。

我正在尝试将两个不同的列合并为一个列,如下所示:

select FirstName + LastName as FullName

我想得到以下结果:

这意味着第一行将有 7 个可见字符 (Michael),然后是 8 个空格,然后是 6 个可见字符 (Jordan),然后是 9 个空格。总共有 30 个字符。 第二行将有 5 个可见字符(魔术师),然后是 10 个空格,然后是 7 个可见字符(约翰逊),然后是 8 个空格。 第三行将有 5 个可见字符 (Larry),然后是 10 个空格,然后是 4 个可见字符 (Bird),然后是 11 个字符。

两列的长度总是不同的,所以我正在寻找无论长度如何都能工作的代码。这意味着它总是在名字后添加正确数量的空格。您可能已经注意到,名字始终为 15 个字符(可见或为空),姓氏为另外 15 个字符(可见或为空)。

有人知道怎么做吗? 提前致谢!

使用char():

select concat(convert(char(15), firstname), convert(char(15), lastname))

char() 类型自动用空格填充字符串,因此无需更多工作。这还有一个很好的功能,如果名字或姓氏太长,则只使用前 15 个字符。

对于len(),这是明确的documented(我认为符合标准):

Returns the number of characters of the specified string expression, excluding trailing spaces.

遵循此建议:

Note

To return the number of bytes used to represent an expression, use the DATALENGTH function.

Here 是一个 db<>fiddle.

SQL服务器在量长时对空格打折。因此,在上面的长度中,您将得到 21 和 20。要在不删除尾部空格的情况下查看长度,请使用 datalength().