如何使用SQL Server中的GUID进行数学运算

时间:2012-11-14 21:21:34

标签: sql sql-server-2008

我需要在触发器中使用SQL Server GUID进行一些数学运算,并且我很难弄清楚如何将uniqueidentifier转换为numeric(38,0)

一个潜在的问题:我的理解是这两种数据类型都是16字节的“整数”。如果我在这里错了,请纠正我。

否则,我将如何进行此转换?我已经尝试过CAST和CONVERT,并且每当我尝试时,不允许从数据类型uniqueidentifier到数字的显式转换不允许。作为错误消息。我真的不想解析每个字符并在UDF中进行十六进制数学运算。

这可能吗?

这是我的脚本,可以快速重现:

DECLARE @guid uniqueidentifier
SET @guid = NEWID()
DECLARE @a numeric(38,0)
SET @a = 2
PRINT CAST(@guid AS numeric(38,0)) -- fails
PRINT @guid / @a -- also fails

1 个答案:

答案 0 :(得分:0)

不幸的是,我没有偶然发现从VARCHAR的十六进制值到NUMERIC一次循环一个数字的转换。

declare @GUID as UniqueIdentifier = NewId()
declare @Binary as VarBinary(64) = @GUID
declare @String as VarChar(64) = Convert( VarChar(64), @Binary, 2 )

select @GUID as 'GUID', @Binary as 'Binary', @String as 'String'