修改
我正在将列数据类型更改为Varchar,应该建议工作,答案将被提升
全文:
我为每个5位数的人接收一个具有相关临时号码的人的数据,我处理这些信息,然后将变量发送到处理这些数据插入的存储过程。将变量发送到存储过程时,我似乎丢失了任何带前缀的0
例如:
发送到存储过程的编号 - 实际插入的编号列
12345 - 12345
01234 - 1234
12340 - 12340
这仅适用于前面有0
的数字。我收到的意思是:
00012
它会插入12
有没有办法我可以将列更新为始终0
向左填充固定数字,这意味着如果我们12
它会自动生成值00012
。
OR
当变量插入表中之前由存储过程接收变量时,是否有办法对变量执行此操作。
有点像:
SET @zeroPaddedFixedNum = LeftPad(@numberRecieved, '0', 5);
此外,我现在需要停止插入和更新所有当前错误加长的数字。有什么建议?
也许只是我的谷歌能力失败但我尝试搜索了很多页面。
答案 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')