2013-11-26 32 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') 
相关问题