如何生成特定长度的单列?
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()
.
这并不像看起来那么简单。我挣扎了几个小时,用谷歌搜索无济于事。
我想生成一个长度始终为 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()
.