2014-01-10 88 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 
相關問題