2013-03-11 101 views
2

我想投或轉換NEWID()輸出爲十進制(與所需的最小空間)TSQL NEWID轉換成十進制(38,0)

到目前爲止,我這樣做:

SELECT CAST('0x'+REPLACE(CAST(NEWID() AS VARCHAR(50)), '-', '') AS DECIMAL(38,0)) 

但我得到這個錯誤:

將數據類型varchar轉換爲數字時出錯。

搜了很多,但越來越沮喪,來到這裏找到一些幫助。

非常感謝提前。


更新:十進制(8,0)變成十進制(38,0),仍然得到相同的錯誤。

+3

這似乎註定要失敗。 Guid是16個字節。多於8位小數。如果轉換爲16字節的帶符號整數,範圍將爲'-170,141,183,460,469,231,731,687,303,715,884,105,728'至'170,141,183,460,469,231,731,687,303,715,884,105,727' – 2013-03-11 10:13:14

+0

@Martin我認爲它最多支持17個字節:http://msdn.microsoft.com/en-us/library/ms187746 .aspx,所以我相信這不是不可能的。 – 2013-03-11 10:22:12

+0

這可能不是不可能的,但是你將使用什麼算法從GUID轉換爲'decimal(38,X)'?使用整數表示是不可能的,因爲這將需要'十進制(39,0)',你會從中得到什麼好處? – 2013-03-11 10:25:51

回答

5

這是一個xy problem

要用於GUID的正確數據類型是uniqueidentifier。沒有必要自己將它轉換爲一些數字數據類型。

uniqueidentifier以16字節的二進制格式存儲,而不是顯示的char(36)字符串。

+0

非常感謝您的澄清。 – 2013-03-11 11:06:06