Sql server TSQL将newid转换为十进制(38,0)
我想将newid()输出转换为十进制(需要最小空间) 到目前为止,我做到了:Sql server TSQL将newid转换为十进制(38,0),sql-server,tsql,guid,newid,Sql Server,Tsql,Guid,Newid,我想将newid()输出转换为十进制(需要最小空间) 到目前为止,我做到了: SELECT CAST( '0x'+REPLACE(CAST(NEWID() AS VARCHAR(50)), '-', '' ) AS DECIMAL(38,0) ) 但我得到了一个错误: 将数据类型varchar转换为数字时出错 找了很多,但很沮丧,来到这里寻求帮助 非常感谢 更新:十进制(8,0)变为十进制(38,0),并且仍然得到相同的错误。这是一个错误 用于guid的正确数据类型是uniqueident
SELECT CAST( '0x'+REPLACE(CAST(NEWID() AS VARCHAR(50)), '-', '' ) AS DECIMAL(38,0) )
但我得到了一个错误:
将数据类型varchar转换为数字时出错
找了很多,但很沮丧,来到这里寻求帮助
非常感谢
更新:十进制(8,0)变为十进制(38,0),并且仍然得到相同的错误。这是一个错误 用于guid的正确数据类型是
uniqueidentifier
。不需要自己将其转换为数字数据类型
uniqueidentifier
以16字节二进制格式存储,而不是显示的char(36)
字符串。这似乎注定要失败。Guid是16个字节。远远超过小数点后8位。如果转换为16字节有符号整数,则范围为−170141183460469231731687303715884105728
到170141183460469231731687303715884105727@马丁我认为它最多支持17个字节:,所以我相信这不是不可能的。这可能不是不可能的,但你将使用什么算法从GUID转换为十进制(38,X)?使用整数表示是不可能的,因为这需要decimal(39,0)
,您将从中获得什么好处?@Martin我的目标是:以比存储为Varchar更符合逻辑的方式存储GUID!将其存储为varchar会降低连接性能。那么,将其存储为十进制值怎么样。我想这会把加入时间缩短一半。但我应该先测试一下。但对于测试,我需要将guid存储为十进制值,并测试十进制联接的性能!将其存储为uniqueidentifier
而不是varchar
。这是最有效的格式。它实际上并没有存储为人类可读的字符串。它是这样存储的SELECT CAST(NEWID()为二进制(16))
非常感谢您的澄清。