Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server TSQL将newid转换为十进制(38,0)_Sql Server_Tsql_Guid_Newid - Fatal编程技术网

Sql server TSQL将newid转换为十进制(38,0)

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

我想将newid()输出转换为十进制(需要最小空间)

到目前为止,我做到了:

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))
非常感谢您的澄清。