右键填充具有可变数量空格的字符串

Ton*_*ony 25 sql-server ssrs-2008

我有我要用来填充参数框在SSRS 2008年的客户表cust_num是价值的串联cust_namecust_addr将标签.表中的必填字段是:

cust_num     int            PK
cust_name    char(50)       not null
cust_addr    char(50)
Run Code Online (Sandbox Code Playgroud)

SQL是:

select cust_num, cust_name + isnull(cust_addr, '') address
from customers
Run Code Online (Sandbox Code Playgroud)

这给了我参数列表中的这个:

FIRST OUTPUT - ACTUAL
1       cust1              addr1
2       customer2               addr2
Run Code Online (Sandbox Code Playgroud)

这是我的预期,但我想要:

SECOND OUTPUT - DESIRED
1       cust1              addr1
2       customer2          addr2
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

select cust_num, rtrim(cust_name) + space(60 - len(cust_name)) +
                 rtrim(cust_addr) + space(60 - len(cust_addr)) customer
from customers
Run Code Online (Sandbox Code Playgroud)

这给了我第一个输出.

select cust_num, rtrim(cust_name) + replicate(char(32), 60 - len(cust_name)) +
                 rtrim(cust_addr) + replicate(char(32), 60 - len(cust_addr)) customer
Run Code Online (Sandbox Code Playgroud)

这也给了我第一个输出.

我也试过替换space(),char(32)反之亦然

我尝试过各种变化substring,leftright都无济于事.

我也用ltrim,并rtrim在各个景点.

60的原因是我检查了两个字段中的最大长度,它是50,我希望字段之间有一些空格,即使字段是最大的.我并不真正关心截断的数据,因为城市,州和邮政在不同的领域,所以如果街道地址的末尾被砍掉,我猜是可以的.

这不是一个显示阻止,SSRS报告目前部署了第一个输出,但我想尽可能使它更清洁.

Jim*_*Jim 68

Whammo blammo(领先空间):

SELECT 
    RIGHT(space(60) + cust_name, 60),
    RIGHT(space(60) + cust_address, 60)
Run Code Online (Sandbox Code Playgroud)

或(对于尾随空格)

SELECT
    LEFT(cust_name + space(60), 60),
    LEFT(cust_address + space(60), 60),
Run Code Online (Sandbox Code Playgroud)

  • 我知道这个答案在这里已经存在多年了,但是尾随的空间对我来说并不适用.似乎无论我做什么,尾随空间都被修剪掉了. (2认同)
  • 尝试CAST(LEFT(cust_name + space(60),60)AS VARCHAR(60)) (2认同)

Jus*_*n C 11

用空格右填充字符串(不修剪它们)的最简单方法是简单地将字符串转换为 CHAR(length)。MSSQL 有时会从 VARCHAR 中删除空格(因为它是可变长度的数据类型)。由于 CHAR 是固定长度的数据类型,SQL Server 永远不会修剪尾随空格,并且会自动用空格填充比其长度短的字符串。例如,请尝试以下代码片段。

SELECT CAST('Test' AS CHAR(20))
Run Code Online (Sandbox Code Playgroud)

这将返回值'Test '


小智 5

这是基于吉姆的答案,

SELECT
    @field_text + SPACE(@pad_length - LEN(@field_text)) AS RightPad
   ,SPACE(@pad_length - LEN(@field_text)) + @field_text AS LeftPad
Run Code Online (Sandbox Code Playgroud)

好处

  • 更直截了当
  • 稍微清洁(IMO)
  • 更快(也许?)
  • 轻松修改为用于以非固定宽度字体显示的双填充或从左到右从中间拆分填充

缺点

  • 不处理LEN(@field_text)> @pad_length