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

Posted

技术标签:

【中文标题】如何生成特定长度的单列?【英文标题】:How to produce a single column of a specific length? 【发布时间】:2020-06-29 13:44:41 【问题描述】:

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

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

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

选择名字 + 姓氏作为全名

我想得到以下结果:

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

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

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

【问题讨论】:

如果名字正好是 15 个字符怎么办,例如MyQuiteLongName?然后我们输出MyQuiteLongNameSurname,还是删除一个字符以确保之间有空格? 我只是想让这个例子更简单。就我而言,它实际上是 30 个字符。不能再长了。如果是,则第二部分紧随其后,没有空格 【参考方案1】:

使用char():

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

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

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

返回指定字符串表达式的字符数,不包括尾随空格。

遵循此建议:

注意

要返回用于表示表达式的字节数,请使用 DATALENGTH 函数。

Here 是一个 dbfiddle。

SQL Server 在测量长度时会忽略空格。因此,在上面的长度中,您将得到 21 和 20。要查看长度而不删除尾部空格,请使用 datalength()

【讨论】:

哇,@GordonLinoff 的回答多么简短而甜蜜!我本来打算回答的,但是看到你的之后,我太尴尬了,不敢回答,哈哈。给我点赞:-) 当我用你的代码或在 db fiddle 上尝试它时,我做对了,但不是用我的 sql server 您在 SQL Server 上获得了什么?您如何查看 SSMS 中的结果? 是不是真的是对的,只是空的空间比使用的空间小?我的意思是,我的结果没有显示第二行的姓氏与第一行的姓氏在同一点开始,但可能是可见空间比空白空间大得多。否则,我不知道为什么它“似乎”不起作用 实际上,它似乎并没有像预期的那样工作。我会假设我从以下得到 60 的长度:

以上是关于如何生成特定长度的单列?的主要内容,如果未能解决你的问题,请参考以下文章

在java中生成6位pin

生成特定的随机数

特定条件下数据框单列中的值

如何在 Java 中生成特定范围内的随机整数?

如何在 Java 中生成特定范围内的随机整数?

将不同长度的逗号分隔数据行折叠成单列的首选 Pandas 解决方案 [重复]