2013-11-26 55 views
0

我需要在此數據庫字段中插入值,但如果此數字少於9位數字,則需要使用前導0填充值,例如12345應該在將其插入數據庫之前將其轉換爲000。我正在嘗試這個,但它不工作,我不能使用存儲過程,這有可能嗎?這裏在插入SQL Server數據庫之前使用0填充數字

insert into my_table (right('00000000' + cast(account as char(8)), 8)) values ('12345') 
+0

這聽起來像是你應該能夠在顯示層上處理的東西,而不是將數字作爲字符串存儲在數據庫中。有沒有理由不起作用? –

+2

什麼**數據類型**是你想存儲到哪一列?一個數字列只存儲**數值** - 沒有前導零(這些數值無關緊要) –

回答

3

兩個問題:

  1. 你有表達(即CAST和RIGHT功能)在列名指定區域,而不是價值區域
  2. 您鑄造到右8個字符的填充文本字段(即CHAR)(左側5個字符爲12345,右側多出3個空格),然後在將8個最右側字符添加到左側前加上零。最右邊的8個恰好是12345 + 3個空格;-)。您應該使用VARCHAR。

試試這個:

INSERT INTO my_table (Account) 
VALUES (RIGHT('00000000' + CAST(12345 AS VARCHAR(8)), 8)) 
0

使用STR()到數字轉換爲右對齊的字符串。使用CONVERT(varchar(8),...)的過程無法參數化,因爲varchar(@size)無效。

SELECT REPLACE(STR(12345,8),' ','0') 
相關問題