Ton*_*ony 25 sql-server ssrs-2008
我有我要用来填充参数框在SSRS 2008年的客户表cust_num是价值的串联cust_name和cust_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,left但right都无济于事.
我也用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)
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)
好处
缺点