2017-05-09 108 views
0

我有以下的在我的SELECT语句中的代码 -填充字段以空格

SELECT convert(varchar (24),ra.Reference)

如果结果 - R0_2,所以4个字,你怎么去填充尾随空间(右边)剩余的20个字符组成24个?

类似的,如果我有一个说18.00的数字,我想要添加一个#到前面,我知道我可以用CONCAT实现。 但是这个领域我想是16个字符,任何领先的空间被填充为白色的空间,所以这个例子看起来像 - “XXXXXXXXXX#18.00”(其中x是一个空格)

谢谢你的任何咨询。

回答

1

你可以使用的一个技巧就是连接到字符串的填充量,保证填充缺失的空格。对于长度为24个字符的字符串,在第一个示例中,我们可以将24个空格连接到该字符串的末尾。然后,取左边的前24个字符,得到的字符串应该是右边用空格填充。类似的逻辑适用于其他情况。

首先查询:

SELECT LEFT(CONVERT(varchar(24), ra.Reference) + '      ', 24) 
FROM yourTable 

第二个查询:

SELECT RIGHT('    ' + '#' + CONVERT(varchar(16), ra.TotalValue), 16) 
FROM yourTable 
+0

你我的朋友是一个star.The第二我稍微修改RIGHT(''+'#'+ convert(varchar(16),rac.TotalValue),16) – ikilledbill

+0

谢谢,但我忍不住对比尔感觉不好:-) –

0

你也可以使用REPLICATE准确基于文本的长度为每个小区垫,以确保它总是24字符:

DECLARE @Test1 VARCHAR(24) = 'Test', 
     @Test2 VARCHAR(24) = 'Longer String' 

SELECT CONCAT(@Test1, REPLICATE(N' ', 24 - LEN(@Test1))), 
     CONCAT(@Test2, REPLICATE(N' ', 24 - LEN(@Test2))) 

而对于#....

DECLARE @Number DECIMAL(4,2) = 18.00 
SELECT CONCAT(REPLICATE(' ', 15 - LEN(CONVERT(VARCHAR(16), @Number))), '#',@Number) 

我在这里用15尽管它是16个字符占另外的#