2017-09-27 11 views
-1

varchar(10)をSQL Server 2014の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)'は最高の偶然によって整数に過ぎません。あなたは*六角形を整数に変換することができましたが、この時点でそれを望む理由を説明するほうが良いでしょう。なぜなら、解決しようとしている問題(CRYPT_GEN_RANDOMのような)に対しては、 –

+2

しかし、 'newid()'はあなたにアルファ数値の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にしか変換できません。私は、この基準を満たす(そうではない)ランダムな文字列を生成することはそれほど証明できないとは思わない。あなたの質問への簡単な答えはyesです。文字列が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; 
関連する問題