2017-09-27 99 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; 
相關問題