T-SQL - CAST char,前导零到int

时间:2018-05-22 09:31:41

标签: sql tsql casting

我想将带有前导零的char转换为int,ex '00010'00010。我尝试使用CASTCONVERT

select CONVERT(int, '00010')

但该函数在开头删除了零并返回10而不是00010。 你知道任何简单的解决方案吗?输入的长度将是5。

3 个答案:

答案 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') 

应解决问题:)