2013-03-11 97 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