2014-01-10 121 views
0

我有一个子字符串,它可以提取我需要的数据,但我需要将前导零添加到结果的前面。我搜索并找到了几个拉数据的前导零的样本,但没有一个使用子字符串。我可以将零添加到结果的末尾,但不知道如何将其添加到前面。我使用的子串如下所示。 “substring((substring(convert(char(6),Convert(int,a.nor_ppd_hrs_no * 100)+ 100000),3,4)+ space(16)),1,16)为'ApprovedHrs',' 这会产生这样7500的结果,我需要它看起来像这样07500.从SQL Server 2008中的子字符串中添加前导零

感谢

+0

012是一个有效的结果还是一定是00012? – RedFilter

+0

你想让这些数字左对齐(列宽为16个字符)吗? –

+0

如果表中的两位数字是72,我们需要结果为07200.原始代码在结尾处添加两个零。 – user3183036

回答

0

假设你需要得到的字符串为5个字符长度,

stuff(substring((substring(convert(char(6),Convert(int,a.nor_ppd_hrs_no*100) + 100000),3,4) + space(16)),1,16), 1, 0, replicate('0', 5 - len(substring((substring(convert(char(6),Convert(int,a.nor_ppd_hrs_no*100) + 100000),3,4) + space(16)),1,16)))) as 'ApprovedHrs 
+0

这提供了领先的零,但由于某种原因,5个字符的列增长到256个字符。有任何想法吗? – user3183036

+0

这可能意味着,您的子字符串将返回长度超过5个字符的字符串。你能检查你的子串结果的最大长度吗? –

+0

只提取该列的原始数据,字符长度不超过1或2个字符。 – user3183036

0

一个最简单的办法的用于添加前导零以获得具有期望宽度的数字(例如16位数字)是连接一串零(REPLICATE('0', 15)'000000000000000' )与源代码(例如。 123)转换为VARCHAR'123')。

DECLARE @Num INT; 
SET @Num = 123; 
SELECT RIGHT(REPLICATE('0', 15) + CONVERT(VARCHAR(11), @Num), 16) AS NumWithLeadingZeros1 
SELECT RIGHT('000000000000000' + CONVERT(VARCHAR(11), @Num), 16) AS NumWithLeadingZeros2 

输出::然后,结果'000000000000000123'使用RIGHT函数截断到所希望的长度(例如16位数字。)

NumWithLeadingZeros1 
-------------------- 
000000000000
NumWithLeadingZeros2 
-------------------- 
000000000000
0

使用the STR() function到数字转换为固定长度的,右合理的字符串。默认情况下,它使用空格填充,因此请使用' '替换为'0'以获得零填充输出。

SELECT REPLACE(STR(a.nor_ppd_hrs_no*100,5),' ','0') FROM MyTable 
相关问题