我想将带有前导零的char转换为int,ex '00010'
到00010
。我尝试使用CAST
或CONVERT
:
select CONVERT(int, '00010')
但该函数在开头删除了零并返回10
而不是00010
。
你知道任何简单的解决方案吗?输入的长度将是5。
答案 0 :(得分:1)
您必须阅读有关数据类型的信息。 INT
注意的不仅仅是一点点模式。每当您以人类可读的格式看到数字时,实际值将转换为由数字组成的字符串。但这种数字格式不是实际的INT
。
前导零从不属于INT
本身,但可以添加到字符串表示中。所以你的问题(字面意思)实际上没有任何意义。
如果有一个像00012
这样的字符串,并且你想像数字一样使用它,你应该把它投出来:
SELECT CAST('00012' AS INT) + 2; --14
其他答案显示了一些从INT
获取填充字符串表示的方法,但这是相反的方向:
SELECT REPLACE((STR(12,5),' ','0'); --00012
您可以结合使用这些方法:
DECLARE @PaddedNumber CHAR(5)='00012'
SELECT REPLACE(STR(CAST(@PaddedNumber AS INT) + 2,5),' ','0'); --00014
填充数字(按类型! - 一个字符串)被转换为INT
,然后用于计算。结果是INT
,可以将其转换为填充字符串。但最终结果的类型是字符串......
答案 1 :(得分:0)
从数学上讲,前导零是没有意义的,因此Int
不能有前导零。
如果您需要显示前导零,则始终可以转换为varchar
并使用right
连接,如下所示:
DECLARE @MyVal int = 10;
SELECT RIGHT('00000' + CAST(@MyVal as varchar(5)), 5)
答案 2 :(得分:0)
SELECT FORMAT(CONVERT(INT,'00010'), 'd5')
应解决问题:)