我想在 MS SQL Server 中把HASHBYTES (SHA2_256)函数返回的一段哈希字符串转换为一个整数。
这个查询返回
'6BDA'
SELECT (SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4)) as tmp
但是当我试图将其转换为一个int时,会导致一个错误。
--Conversion failed when converting the varchar value '6BDA' to data type int.
SELECT (CONVERT(int, SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4))) as tmp
如果我尝试将子串转换为varbinary,然后再转换为int,结果与27610不同。
--Returns 910312513
SELECT (CONVERT(int, CONVERT(varbinary, SUBSTRING(CONVERT(VARCHAR(64), HASHBYTES('SHA2_256', CAST(12.5 AS VARCHAR(64))), 2), 61, 4)))) as tmp
在Snowflake中,我可以用一个to_number
函数轻松地进行转换。
下面的查询将'6BDA'
转换为27610。我怎样才能用SQL Server实现同样的结果?
SELECT to_number(substr(sha2(TO_VARCHAR(ABS(12.5)), 256), 61), 'xxxx')