在插入SQL Server数据库之前填充数字为0

时间:2013-11-26 18:42:52

标签: sql sql-server

我需要在此数据库字段中插入一个值,但如果此数字少于9位,则需要使用前导0填充,例如,12345之前应转换为000012345将其插入数据库。我正在尝试这个,但它不起作用,我不能使用存储过程,是否可能?

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

2 个答案:

答案 0 :(得分:3)

这里有两个问题:

  1. 您在列名称指定区域中使用表达式(即CAST和RIGHT函数)而不是值区域
  2. 你正在向8个字符的右边填充文本字段(即CHAR)进行投射(左边5个字符是12345,右边是3个空格),然后在抓取8个最右边的字符之前将零添加到左边。最右边的8恰好是12345 + 3个空格;-)。你应该使用VARCHAR。
  3. 试试这个:

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

答案 1 :(得分:0)

使用STR()将数字转换为右对齐字符串。使用CONVERT(varchar(8),...)的过程无法参数化,因为varchar(@size)无效。

SELECT REPLACE(STR(12345,8),' ','0')