2017-09-27 97 views
-1

是否可以在SQL Server 2014中将varchar(10)转换为int在SQL Server 2014中将varchar(10)转换为int

我尝试下面的代码,但我得到一个转换错误

Declare @Random varchar(10) 
set @Random = CONVERT(varchar, right(newid(),10)) 
Declare @rand int = cast(@Random as int) 
select @rand 
+4

'RIGHT(NEWID(),10)'只是一个整数,由最高巧合。你*可以*将hexstring转换为一个整数,但此时你最好解释为什么你想要它,因为对于任何想要解决的问题(比如'CRYPT_GEN_RANDOM'),几乎肯定会有更好的解决方案。 –

+2

但'newid()'给你带有alpha数字的guid,为什么会转换为int?在尝试转换为int之前,将此行添加到您的代码中:'SELECT @ Random'并查看您要转换的内容。 – Tanner

+0

'NEWID'生成一个字符,不仅是数字。 – Sami

回答

0

是否可以在SQL Server 2012下将varchar(10)转换为int?

是的,如果varchar(10)字符串是所有数字字符和字符串内绑定的int的:

-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 

换句话说,这将工作:

select cast('2147483647' as int) 

这将不会:

select cast('2147483648' as int) 

我尝试下面的代码,但我得到一个转换错误

在你的问题中的代码是不是测试你是否可以字符串转换为整数,它正在测试是否任何随机字符串可以转换。您的随机字符串包含无法转换为整数的字母字符,因此您会收到转换错误。但即使将随机字符串限制为数字,在溢出int之前,仍然只能将数字字符串转换为2147483647。我不认为生成符合这个标准的(不那么)随机字符串将证明很多。对你的问题的简单回答是,只要字符串符合int的要求,就可以将字符串转换为int。

0

你可以尝试:

SELECT TRY_CAST(RIGHT(CAST(convert(VARBINARY, NEWID(), 1) AS BIGINT),10) AS INT); 

Rextester Demo

或者,如果你只使用9个digitis:

SELECT RIGHT(CAST(convert(VARBINARY, NEWID(), 1) AS BIGINT),9) + 0; 
相关问题