MS SQL Server零填充

时间:2016-12-09 09:22:55

标签: sql sql-server stored-procedures sql-server-2012

修改
我正在将列数据类型更改为Varchar,应该建议工作,答案将被提升

全文: 我为每个5位数的人接收一个具有相关临时号码的人的数据,我处理这些信息,然后将变量发送到处理这些数据插入的存储过程。将变量发送到存储过程时,我似乎丢失了任何带前缀的0 例如:
发送到存储过程的编号 - 实际插入的编号列

12345 - 12345  
01234 - 1234  
12340 - 12340  

这仅适用于前面有0的数字。我收到的意思是:
00012它会插入12

有没有办法我可以将列更新为始终0向左填充固定数字,这意味着如果我们12它会自动生成值00012
OR
当变量插入表中之前由存储过程接收变量时,是否有办法对变量执行此操作。 有点像:

SET @zeroPaddedFixedNum = LeftPad(@numberRecieved, '0', 5);  

此外,我现在需要停止插入和更新所有当前错误加长的数字。有什么建议?

也许只是我的谷歌能力失败但我尝试搜索了很多页面。

2 个答案:

答案 0 :(得分:5)

为此,列应为varchar数据类型。然后你可以这样做

Insert into table(col)
select right('00000'+cast(@var as varchar(5)),5)

编辑:更新现有数据

Update table
set col=right('00000'+cast(col as varchar(5)),5)
where len(col)<5

答案 1 :(得分:3)

正如所指出的,您必须根据需要使用VARCHAR(5) ...但如果存储的值实际是数字,我不会更改列类型。而是在将这些值传递给SP时使用以下其中一种(您可以使用计算列或VIEW)。

尝试

SELECT REPLACE(STR(YourNumber,5),' ','0');

最大优势:如果您的号码超过5位数,则返回*****。获取错误比获取错误的数字更好......使用RIGHT()的其他方法可能会无法预测地截断您的结果。

使用SQL Server 2012,您应该使用FORMAT()

SELECT FORMAT(YourNumber,'00000')