将前导零添加到SQL server列中的某些值
我正在尝试在sql server中使用int/decimal/numeric列数据类型添加前导零值。如何实现这一目标将前导零添加到SQL server列中的某些值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试在sql server中使用int/decimal/numeric列数据类型添加前导零值。如何实现这一目标 update a ---Int/Decimal/Numeric set Column='0'+b.column1 from #temp a ,#temp2 b ---Varchar column where a.id=b.id 预期结果:001234567 实际结果:1234567您的查询所做的是将0添加到一个数字数据类型:正如人们所期望的,它不会影响它。基本上正如@Fa
update a ---Int/Decimal/Numeric
set Column='0'+b.column1
from #temp a
,#temp2 b ---Varchar column
where a.id=b.id
预期结果:001234567
实际结果:
1234567
您的查询所做的是将0
添加到一个数字数据类型:正如人们所期望的,它不会影响它。基本上正如@Fahmi所评论的,前导零对于数字数据类型(以及类似的数据类型)并不是毫无意义的
您可以在获取值时处理显示问题,通常是将其转换为字符串,如:
select Id, '00' + cast(numberColumn as varchar(9)) from mytable
您可以将“格式”功能与自定义格式一起使用: 示例:选择格式(12,'0000') 返回:“0012”
注意,返回的值是一个字符串。数值没有前导零,但它们的字符串表示形式可以有前导零。这里有两个选项。首先,更改列的类型:
alter #temp alter column a varchar(255);
update a ---Int/Decimal/Numeric
set Column = right('000000000' + b.column1, 9)
from #temp a join
#temp2 b ---Varchar column
on a.id = b.id;
(注意使用正确的JOIN
语法。)
另一种选择是计算列:
alter table #temp add column column_formatted as (format(a.column, '000000000'));
-- you still need the update
update a ---Int/Decimal/Numeric
set Column = try_convert(int, b.column1)
from #temp a join
#temp2 b ---Varchar column
on a.id = b.id;
int /十进制/数字不考虑领先的Zeor,所以它将被丢弃,你必须存储为<代码> VARARAR < /C>或<代码> char < /Cord>,并且需要转换它时,为什么要“添加”一个字符“代码>‘0’< /代码>作为一个前缀,以数字<代码> 1234567代码/代码>结果,在一个值中有两个前导零点,如你预期的结果所示?